我正在编写一个程序
#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
未定义