C语言编程问题(scanf())

来源:百度知道 编辑:UC知道 时间:2024/05/09 18:42:43
#include <stdio.h>
main()
{ int i=1;
char c;
while(i)
{ printf("Continue(Y/N)?");
scanf("%c",&c);
if(c=='N'||c=='n')
i=0;
}
}
运行情况如下:
Continue(Y/N)?y回车
Continue(Y/N)?Continue(Y/N)?我不明白,这里Continue(Y/N)?为何要显示两次。请高人指点,谢谢。

首先纠正你一个误解:
scanf不是直接读取用户的当前输入作为输入,
而是读取的键盘缓冲区内的数据作为输入的。

所以当你输入y回车后,
scanf先取得y作为输入,循环继续;
输出"Continue(Y/N)?",
scanf又取得键盘缓冲区中上次输入的那个回车作为输入,循环继续;
输出"Continue(Y/N)?"

这么改就可以了:
while(i)
{ printf("Continue(Y/N)?");
fflush(stdin);//这一句的作用是强制清空键盘缓冲区内的数据
scanf("%c",&c);
if(c=='N'||c=='n')
i=0;
}

你这个程序就是判断Y或者N。如果Y则继续判断,如果N,则停止。你输入一个N,那么就不会再出现Continue(Y/N)?了