为什么输入一个字母后,会连续输出两个printf内容呢

FFY_1208 2016-09-09 06:22:48
#include <stdio.h>
int main()
{
char s;
int i = 0;
do{
printf("please enter the string!\n");
scanf_s("%c", &s);
if (s >= 'a'&&s <= 'z' || s >= 'A'&&s <= 'Z')
{
printf("YES!");
}
} while (s != '0');
printf("NO!\n");
}
我也调试了,第二次就直接跳过了scanf_s。
...全文
407 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
libinden71 2016-09-10
  • 打赏
  • 举报
回复
因为读取到回车才结束,所以缓冲区还留着回车符,第二次循环直接从缓冲区读取了回车 所有显示了2次!可以在后面加上getchar 吃掉回车!
赵4老师 2016-09-09
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
//请今后要用
int c;
scanf("%c",&c);
//时,都改为
char s[2];
int c;
scanf("%1s",s);
c=s[0];
paschen 2016-09-09
  • 打赏
  • 举报
回复
再或者这样:

#include <stdio.h>
int main()
{
	char ch[2];
	char s;
	int i = 0;
	do{
		printf("please enter the string!\n");
		scanf_s("%s", ch, 2);
		s = ch[0];
		if (s >= 'a'&&s <= 'z' || s >= 'A'&&s <= 'Z')
		{
			printf("YES!");
		}
	} while (s != '0');
	printf("NO!\n");
}
paschen 2016-09-09
  • 打赏
  • 举报
回复
解决方法可以在scanf_s加上getchar();
paschen 2016-09-09
  • 打赏
  • 举报
回复
每次输入完后的换行符 \n 会在下一次接收进来

70,009

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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