很经典的新手问题, while 下 回车的副作用 详细解释

LI-O 2014-01-22 01:09:21
求解
#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 也输出了~~
...全文
98 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-01-23
  • 打赏
  • 举报
回复
iaccepted 2014-01-22
  • 打赏
  • 举报
回复
我每次都是这样处理的

#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就是读入但不赋给任何变量,我通常都是这样处理的,用起来很方便 没法修改所以重发一贴
iaccepted 2014-01-22
  • 打赏
  • 举报
回复
我每次都是这样处理的

#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就是读入但不赋给任何变量,我通常都是这样处理的,用起来很方便
赵4老师 2014-01-22
  • 打赏
  • 举报
回复
很经典的回答: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
图灵狗 2014-01-22
  • 打赏
  • 举报
回复
改用getch()函数试试。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧