c新手吧 关注:8,558贴子:48,066
  • 1回复贴,共1

do-while循环异常跳出(?)的问题

取消只看楼主收藏回复

嗯...渣新又来向大触们求教了o(* ̄▽ ̄*)o
别的不多说,先打个码...
/*第二次开始无视scanf自动行进*/
#include <stdio.h>
#include <ctype.h>
int main()
{
char next = ' ';
do
{
next = ' ';
printf("Go ahead? (Y/N)");
scanf("%c",&next);
}
while(toupper(next) == 'Y');
return 0;
}
/*成功手动循环*/
#include <stdio.h>
#include <ctype.h>
int main()
{
int next = 0;
do
{
next = 0;
printf("Go ahead? (1/2)");
scanf("%d",&next);
}
while(next == 1);
return 0;
}
像上面代码的注释写的,第一段代码在第一次运行的时候很正常,显示Go ahead? ;然后输入Y,进入第一次循环。这时候,不知道为什么显示Go ahead?之后程序自动结束(显示press any key to continue),把scanf函数跳过了。将next的初始值和循环中初始化的值从空格换成Y之后,第一次运行依旧正常,输入Y之后循环就无限进行了(显示为代码满屏飞Σ(#°Д°))。
然后就有了第二段代码,这是将循环条件换成int类型的,空格换成0,Y换成1,N换成2,这次倒是能成功手动控制循环了,那应该不是编译器的问题...我翻了下“课本”(霍顿的C语言经典入门)中类似的代码(simon游戏循环条件),发现简化后和第一段代码一样,运行结果也是第一次循环就跳过了scanf函数直接结束程序。
这是怎么回事呢?我已经搞不懂了...


IP属地:广东1楼2016-02-16 16:31回复


    嗯...果然还是附上运行效果图比较好吧...顺便2L我的


    IP属地:广东2楼2016-02-16 16:35
    回复