最近被getchar()弄的有点糊涂,现在基本缕清了。
拿程序举个例子:
#include<stdio.h>
int main(void)
{char ch1,ch2;printf("Iam testing *********.\n");printf("So hard! ***********\n");ch1=getchar();printf("$$$$$$$%c$$$$$$$\n",ch1);getchar();ch2=getchar();printf("$$$$$$$$$$$%c$$$",ch2);return 0;
}
这里要说明的是:
1、
printf("Iam testing *********.\n");
printf("So hard! ***********\n"); 这两个语句并不会在缓存中留下 \n 符。
所以在第一个 ch1=getchar() 前面不需要加上 getchar().
加了反而是错的, 缓存中没有字符,如果是 getchar().
ch1=getchar()
输入一个字符后,反而会把字符丢掉,而把 \n 赋给了 ch1.
2, 用于 清空缓存中回车符的 getchar(), 可以放在 ch1=getchar() 的后面,也可以放在 ch2=getchar() 的前面, 但是 二者只能取其一,不能同时都用。
3、如果是 循环,则要注意 循环产生的问题, 这时 如果ch1=getchar() 的后面没有 ch2=getchar() ; 那么ch2=getchar() 的前后都要加上 getchar() 用于清除缓存中的\n。
如下程序
#include<stdio.h>
int main(void)
{char ch1,ch2;printf("Iam testing *********.\n");printf("So hard! ***********\n");while(ch1!='a'){ch1=getchar();printf("$$$$$$$%c$$$$$$$\n",ch1);getchar();ch2=getchar();getchar();printf("*********%c******\n",ch2);}printf("Done!\n");return 0;
}
或者 ch1 ch2 赋值语句后各加一个getchar(), 都是可以的。
总之,就是要将输入时的 回车符 处理掉。