在笔试中,经常见到字符的读入与输出的题目。逆序打印输入时最常见、最基本的考题,复杂点的就是统计单词、逆序打印单词之类的。难点是如何判断输入的结束,如果用getchar函数,其输入结束符为EOF(其打印值为-1),c=getchar(); //c的类型为Int型,因为EOF==-1,那么scanf函数的使用方法呢?
#include<stdio.h>
int main()
{
int i;
char ch;
for(i=0;i<=3;i++)
{
printf("%d ---- ",i);
scanf("%c", &ch);
printf("/n");
}
return 0;
}
运行结果:
0 ---- a
1 ----
2 ---- b
3 ----
产生其原因在于:
因为 scanf %c 只是读入一个字符,而你在输入时实际上输入的是:某个字符
+Enter,Enter 产生的/n 也会停留在输入缓冲区中,下次调用 scanf %c 时就会直接读到
它而不是等待你再次输入!同理,getchar()也有类似的行为。所以我们才不提倡使用
scanf("%c", ...),尤其是把它在循环中。
解决的方法:
(1)、将 scanf("%c", &ch); 修改为:
scanf(" %c", &ch); /*在%前加上一个空格*/
(2)、将 scanf("%c", &ch); 修改为:
scanf("%c%*c", &ch);