Почему моя программа, при репите печатает милиард надписей? - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, k, t;
printf("Vvedity 5znacno chislo\n");
t=scanf("%5d", &n);
k = 10000;
if (t==!0 && n<100000 && n>9999)
for(i = 0; k != 0; i++) {
printf("%d chislo = %d\n",i+1, n/k%10);
k/=10;
}
else {
printf("Oshibka,nepravilny vvod\n \0");
main();
}
return 0;
}Решение задачи: «Почему моя программа, при репите печатает милиард надписей?»
textual
Листинг программы
while((c = getchar()) != '\n' && c != EOF);
Объяснение кода листинга программы
- Программа считывает символ из стандартного ввода (по умолчанию это клавиатура) в переменную типа char с именем
c. - Процесс считывания продолжается до тех пор, пока не будет считан символ новой строки (\n) или пока не достигнется конец файла (EOF).
- При каждом считывании символа, программа проверяет его значение на равенство новой строке или EOF.
- Если условие истинно, то программа прекращает цикл и переходит к следующей итерации.
- Если условие ложно, то программа продолжает считывать символы до тех пор, пока не достигнет новой строки или EOF.
- Если программа достигает EOF без считывания новой строки, то она выводит миллиард сообщений, что может быть нежелательным.
- Чтобы исправить эту проблему, можно добавить дополнительную проверку после каждой итерации цикла, чтобы проверить, достигнут ли EOF, и прекратить цикл, если это так.