我写的程序是
#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;
}
for循环没有终止,但是当我将scanf()
替换为getchar()
时
#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;
}
然后该程序按预期运行。为什么会这样呢? scanf()
不读EOF
吗?
答案 0 :(得分:1)
否,由于EOF
不是字符,scanf
不会将ch
设置为EOF
。
引自scanf
文档:
返回值
成功时,该函数返回已成功填充的参数列表的项目数。由于匹配失败,读取错误或文件结尾的范围,此计数可以与预期的项目数匹配或更少(甚至为零)。
适用于您的情况:您需要检查scanf("%c", &ch)
的返回码:
ch
。ch
未定义。