很经典的新手问题, while 下 回车的副作用 详细解释
求解
#include<stdio.h>
int main(void)
{
char c;
scanf("%c",&c);
while(1)
{
if(c =='q'){
printf("%d\n",'q');
break;
}
printf(" %d \n",c);
scanf("%c",&c);
}
printf("Done!!\n",c);
return 0;
}
输出的副作用是 输出的时候连带这 回车的 10 也输出了~~
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
[解决办法]
我每次都是这样处理的
#include<stdio.h>
int main(void)
{
char c;
scanf("%c%*c",&c);
while(1){
if(c =='q'){
printf("%d\n",'q');
break;
}
printf(" %d \n",c);
scanf("%c%*c",&c);
}
printf("Done!!\n",c);
return 0;
}
%*c就是读入但不赋给任何变量,我通常都是这样处理的,用起来很方便