马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
{
char c;
do
{
printf("继续否(Y/N):");
scanf("%c",&c);
}while(c!='n'||c!='N');
return 0;
}
RT,想编一个简单的程序,实现在运行完一次循环后提示“继续吗”,然后根据输入Y或N程序判断继续循环或者退出程序。但上面的程序运行结果如下:
这个结果表示很不理解 ??
为什么printf函数中的字符会输出两次??
为什么while语句没有进行判断??
这个结果意思就是进入死循环了
debug的时候发现一个奇怪的地方:
RT,第一次循环完成时c被赋值n,然后while没有进行判断直接进入第二次循环,而这个时候c值自动赋为图中所示的10''(Why???),然后自动进行第三次循环,所以导致输出结果一行中连续出现两次printf函数中的内容。
不知道是哪里出了问题,请各路大神不吝赐教!
本帖最后由 Icetone 于 2017-3-18 13:20 编辑
你在第一次输完字符,输入流里面有:一个 y字符 加 一个换行符号
所以输入流中有两个字符,因此会循环两次;
× × 无限循环也就可以理解了,因为每次输入流中最后的字符都是 换行符 × × 错了这句话
无限循环是因为条件判断不对,(c!='n'||c!='N')的结果返回的是0或者1
当c=='n'的时候 (c!='n')== 0,(c!='N')== 1,所以整体结果为1,因此继续循环;c=='N'的时候同理。
条件改成 while (c != 'n' && c != 'N');
如果我的表达用词不是太准确0.0,请指点
|