Это мой пример кода. Я написал вопрос в моем комментарии:Почему я не получаю EOF?
main(){
long cnt; // chars count
int c;
/* Why the 'for' cicle doesn't finish when I input the
* "a^Z" string and press ENTER? At this case '^Z' is
* CTRL + Z (i.e this is EOF). I expected the second loop
* will get the EOF (i.e. -1), but it has 26 instead of. Why?
*/
for(cnt = 0; (c = getchar()) != EOF; ++cnt)
;
printf("Chars count: %ld", cnt);
}
Если я ставлю a
, ENTER
, CTRL
+ Z
, ENTER
тогда я получить ожидаемый результат: CTRL
+ Z
брейков петли.
UPD
Когда я прочитал информацию о getchar
функции, то я увидел, что она использует линию-буферные вход. Он ожидает ENTER
для ввода данных. Я не видел информации, что он также может выталкивать данные, когда он получает Ctrl - Z
. Поэтому я ожидал, что второе значение будет EOF
в моем случае (и цикл будет сломан), то есть я ожидаю, что моя строка строки будет проанализирована, как последовательность a
, , \n
.
Почему у вас есть точка с запятой после вашей петли? – byxor
@BrandonIbbotson Использование цикла ограничено для увеличения 'cnt'. –
@SouravGhosh Делает смысл. Благодарю. – byxor