scanf()是否不读取EOF?
我在写一个程序scanf()是否不读取EOF?,c,C,我在写一个程序 #include <stdio.h> int char_value(int); void main() { int ch; printf("Enter characters : "); scanf("%c", &ch); for (printf("Letter is_Letter letter_Postion\n"); ch!=EOF; scanf("%c", &ch)) { if (isalp
#include <stdio.h>
int char_value(int);
void main()
{
int ch;
printf("Enter characters : ");
scanf("%c", &ch);
for (printf("Letter is_Letter letter_Postion\n"); ch!=EOF; scanf("%c", &ch))
{
if (isalpha(ch))
printf(" %-3c %-9s %d\n", ch, " Yes", char_value(toupper(ch)));
else if (isspace(ch))
printf("#SPACE %-9s N/A\n", " No");
else if (!isgraph(ch))
printf("#BLANK %-9s N/A", " No");
else
printf(" %-3c %-9s N/A\n", ch, " No");
}
}
int char_value(int ch)
{
return ch-64;
}
然后,程序按预期运行。为什么会这样?scanf是否不读取EOF?否,因为EOF不是字符,所以scanf不会将ch设置为EOF
引自文件:
返回值
成功时,函数返回成功填充的参数列表的项数。由于匹配失败、读取错误或到达文件末尾,此计数可以与预期的项目数匹配,甚至可以小于零
适用于您的案例:您需要检查scanf%c的返回代码,&ch:
如果为1,则设置ch。
如果为0,则ch未定义。
检查returns.EOF本身不是字符,它是在到达输入流末尾时设置的条件。scanf和getchar都返回EOF以指示流上没有更多的输入。对于scanf%c和&ch,如果为0,则不应返回EOF。在文件末尾ch未更改的情况下,预期返回值为EOF。预期返回值为EOF,错误时ch不确定。如果在读取过程中发生读取错误或到达文件末尾,您的引用将被设置为正确的指示符。。。。如果其中任何一种情况发生在任何数据成功读取之前,则返回EOF。如果EOF的行为与字符不同,那么getchar如何读取它并将其分配给ch?@RaviRaj EOF是一个int-1,因此超出字符范围0x00。。。0xff。因此int getchar可以返回一个字符,如果没有读到任何内容,也可以返回EOF。@chux RestoreMonica你的意思是scanf永远不会返回0?@chux RestoreMonica你能举个例子说明scanf返回0,因为我想不出一个。
#include <stdio.h>
int char_value(int);
void main()
{
int ch;
printf("Enter characters : ");
ch=getchar();
for (printf("Letter is_Letter letter_Postion\n"); ch!=EOF; ch=getchar())
{
if (isalpha(ch))
printf(" %-3c %-9s %d\n", ch, " Yes", char_value(toupper(ch)));
else if (isspace(ch))
printf("#SPACE %-9s N/A\n", " No");
else if (!isgraph(ch))
printf("#BLANK %-9s N/A", " No");
else
printf(" %-3c %-9s N/A\n", ch, " No");
}
}
int char_value(int ch)
{
return ch-64;
}