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 никогда не получен от стандартного ввода. Как это может случиться?
Делать 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
Других решений пока нет …