Базовая обработка потока в c
Я просто сбит с толку основной обработкой потока в C. Даже после часа поиска в Google и чтения по этой проблеме, я не мудрый (и это не первая моя попытка вникнуть в это). Я пытаюсь читать цифры из ввода до тех пор, пока не будет достигнут EOF или не число, и смогу различить эти 2. От того, что я понимаю, это должно работать, но feof
а также ferror
условия никогда не выполняются. Это почему? И может ли кто-нибудь предоставить мне рабочий фрагмент кода вместе с дурацким дружеским подробным объяснением?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int number;
printf("number or EOF:\n");
while(scanf("%d",&number) == 1)
{
printf("read number %d\n",number);
}
if(ferror(stdin))printf("error reading\n");
else if (feof(stdin))printf("eof reached\n");
return 0;
}
1 ответ
Моя проблема с пониманием поведения потока у меня возникла из-за одной маленькой особенности. Я не знал, что в консоли Windows есть новая недружественная неопределенность, Ctrl+Z может быть как чтение ASCII 0x1A, если вы вводите ввод как 12 23 ^Z/enter/, но читается как правильный EOF, когда вы делаете 12 23 /enter/^Z/ введите /. этот код решает проблему
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("int or eof\n");
int num;
while( scanf("%d",&num) ==1 )
{
printf("the read number is %d \n",num);
}
if(!feof(stdin) && getchar()!=0x1A)//first check if its read as EOF,
//if it fails, call getchar for help to check for ^Z
{
printf("non-int error\n");
}
else printf("eof ok\n");
system("PAUSE");
return 0;
Я прошу прощения за вводящий в заблуждение вопрос.