scanf()不读取EOF吗

  • 本文关键字:EOF 读取 scanf c
  • 更新时间 :
  • 英文 :


我正在编写一个程序

#include <stdio.h>
int char_value(int);
void main()
{
int ch;
printf("Enter characters : ");
scanf("%c", &ch);
for (printf("Letter is_Letter letter_Postionn"); ch!=EOF; scanf("%c", &ch))
{
if (isalpha(ch))
printf("   %-3c %-9s      %dn", ch, "   Yes", char_value(toupper(ch)));
else if (isspace(ch))
printf("#SPACE %-9s      N/An", "   No");
else if (!isgraph(ch))
printf("#BLANK %-9s      N/A", "   No");
else
printf("   %-3c %-9s      N/An", ch, "   No");
}
}
int char_value(int ch)
{
return ch-64;
}

其中for循环没有终止,但当我用作为的getchar()替换scanf()

#include <stdio.h>
int char_value(int);
void main()
{
int ch;
printf("Enter characters : ");
ch=getchar();
for (printf("Letter is_Letter letter_Postionn"); ch!=EOF; ch=getchar())
{
if (isalpha(ch))
printf("   %-3c %-9s      %dn", ch, "   Yes", char_value(toupper(ch)));
else if (isspace(ch))
printf("#SPACE %-9s      N/An", "   No");
else if (!isgraph(ch))
printf("#BLANK %-9s      N/A", "   No");
else
printf("   %-3c %-9s      N/An", ch, "   No");
}
}
int char_value(int ch)
{
return ch-64;
}

然后程序按预期运行。为什么会发生这种情况?scanf()不读取EOF吗?

否,因为EOF不是字符,所以scanf不会将ch设置为EOF

引用自scanf文件:

返回值
成功时,函数返回成功填充的参数列表的项数。此计数可能与预期的项数匹配,也可能由于匹配失败、读取错误或到达文件末尾而减少(甚至为零(。

应用于您的案例:您需要检查scanf("%c", &ch):的返回代码

  • 如果为1,则设置ch
  • 如果为0,则ch未定义

最新更新