почему цикл бесконечен?

char s;
list<char> inp;

while(s=fgetc(stdin),s!=EOF)
{
inp.push_back(s);
printf("%c",s);
}
for(list<char>::iterator n=inp.begin();n!=inp.end();n++)
{
cout<<*n;
}

Цикл while в приведенном выше коде никогда не прерывается? Это может произойти, если EOF никогда не получен от стандартного ввода. Как это может случиться?

0

Решение

Делать s int, fgetc() функция возвращает int, поскольку EOF определяется как один.

int s;

Измените это на:

while((s=fgetc(stdin)) != EOF)
{
inp.push_back(s);
printf("%c",s);
}

Также, EOF не читается автоматически при использовании stdin если вы не используете трубу.

Подумайте об этом таким образом…

Программа ждет, пока пользователь введет символы. Как бы программа знала, если EOF был достигнут, или пользователь думает о том, что печатать дальше. Пользователь должен отправить EOF в программу, набрав ctrl+D,

Исключение составляют случаи, когда вы перенаправили stdin к трубе. Например, если вы скомпилировали свою программу в a.out:

cat "myfile" | a.out
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector