Проблема новичка , A6e3iana, 14-Янв-22, 10:51 [смотреть все]Всем доброго времени суток. Изучаю программирование и решая задачу столкнулся с проблемой, нуждаюсь в объяснении что я делаю не так. Приступим: Задача 12.7: Даны две фамилии. Определить, какая из них длиннее. (из задачника "1400 задач по программированию" от Златопольский Д.М.) Для себя решил что входные данные поданы в виде одной строки. Код решения компилируется без замечаний (gcc -Wall -g file.c -o file). При запуске программы получаю бесконечный ввод данных. Тестируя отдельно самолепную функцию GetString таких проблем не получаю и ввод заканчивается как и задумано при нажатии клавиши Enter. Добавление 1 следующей строчки кода и отладочной печати ведет к вышеназванной проблеме бесконечного ввода. Объясните что я делаю не так. Спасибо за внимание. Вот код решения задачи:#include <stdio.h> int GetString(char *str, int strsize) { char c; int i=0; while ((c=getchar())!='\n') { if (i<=strsize-1){ str[i]=c; i++; } } str[i]='\0'; return 0; } int GetWord (char *str, int number, char *word, int wordsize) { int i=0, k=0; int countword=0; char prev=' '; while (str[i]!='\0') { if (prev==' ' && str[i]!=' ') { countword++; } if (countword==number && str[i]!=' ' && k<=wordsize-1) { word[k]=str[i]; k++; } prev=str[i]; } word[k]='\0'; return k; } int main () { enum {strsize=100, wordsize=20}; char str[strsize]; char surname1[wordsize]; char surname2[wordsize]; int lensurname1=0; int lensurname2=0; GetString(str, strsize); lensurname1=GetWord (str, 1, surname1, wordsize); lensurname2=GetWord (str, 2, surname2, wordsize); if (lensurname1 > lensurname2 ) { printf("%s is longer than %s!\n", surname1, surname2); } if (lensurname1 < lensurname2 ) { printf("%s is longer than %s!\n", surname2, surname1); } if (lensurname1 == lensurname2 ) { printf("Surnames are equal!\n"); } return 0; }
|
- Проблема новичка , Аноним, 17:02 , 14-Янв-22 (2)
- Проблема новичка , parad, 09:42 , 15-Янв-22 (3)
- Проблема новичка , A6e3iana, 11:57 , 15-Янв-22 (4)
> в этом цикле нету инкремента i.Большое спасибо! Всё заработало! Даже обидно на невнимательности завалиться :(
- Проблема новичка , ACCA, 21:09 , 17-Янв-22 (5)
- Проблема новичка , A6e3iana, 10:02 , 18-Янв-22 (6)
> Хороший пример, как НЕ НУЖНО писать программы. Сравни с этим: Приветствую! Спасибо за комментарий! Очень важен для меня ибо поднимает актуальные вопросы. Первый: "Как выглядит промышленный код?" По задумке выношу реализацию в отдельные функции и в main оставляю только общую логику и организацию данных. На данном этапе на простых программах это избыточный код, но может быть такая привычка даст результаты в будущем? Второй: "Как правильно учиться?" Где то прочел: пока не знаешь как устроенны и работают простые библиотечные функции не используй их, а пиши свои реализации". ПОДЧЕРКНУ: совет для стадии обучения. Мне он понравился вот и леплю как могу. Из Примера подчеркнул: Проверку входный данных - полезно, ЗАПОМНЮ! Введение переменной хранящей разницу вместо постоянного сравнения и её имя "diff". ЗАПОМНЮ! Это вообще мрак придумывать имена для переменных на англ да ещё как можно короче. Что думаете о выше поставленных вопросах?
- Проблема новичка , Конч, 20:25 , 18-Янв-22 (7)
- Проблема новичка , Конч, 20:28 , 18-Янв-22 (8)
|