请教为什么小弟我输入了N后,没有跳出第一个while,反而进入了第一个while的无限循环
请问为什么我输入了N后,没有跳出第一个while,反而进入了第一个while的无限循环
#include <stdio.h>
int main(void)
{
int variable = 0;
while (1)
{
while (variable != 'N')
{
printf("输入一个100以内的数: ");
scanf_s("%d", &variable, sizeof(variable));
printf("这个数是:%d\n", variable);
}
variable = '1';
while (variable != 'N')
{
printf("输入一个100以外的数: ");
scanf_s("%d", &variable, sizeof(variable));
variable += 100;
printf("这个数是:%d\n", variable);
}
}
return 0;
}
执行的时候,我输入了25,它输出了,并提示让我继续输入,然而我输入N的时候,却进入了无限循环,为什么呢?
------解决思路----------------------
一般循环内连续调用scanf需要刷新缓存,在scanf前加rewind(stdin)
------解决思路----------------------
你用 "%d" 读入,当输入不是数字时(比如你的 N ),scanf 会失败,而输入 'N' 不会被读出。
这样你的 scanf 就会持续失败,然而什么也读不进来。
请参考 6 楼
------解决思路----------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
------解决思路----------------------
楼主你是没弄懂循环的真正意思,循环循环,说白了就是一次次的执行,执行完第一次又接着执行第二次。。。。。直到循环条件不满足为止。并不是执行完这次后就停在循环的最后那里。
就你写的这个代码,按N跳出第一个循环后会接着执行下面那个循环,当再按N后跳出第二个循环来到外面的循环,开始去测试1是不是真的(所有非0都是真的)所得的结果是真的,又接着执行里面的第一个循环。。。。。。。。。直到你关程序(因为1总是真的,所以总跳不出外面那个while)。
#include <stdio.h>
int main(void)
{
int variable = 0;
while (1)
{
while (variable != 'N')
{
printf("输入一个100以内的数: ");
scanf_s("%d", &variable, sizeof(variable));
printf("这个数是:%d\n", variable);
}
variable = '1';
while (variable != 'N')
{
printf("输入一个100以外的数: ");
scanf_s("%d", &variable, sizeof(variable));
variable += 100;
printf("这个数是:%d\n", variable);
}
}
return 0;
}
执行的时候,我输入了25,它输出了,并提示让我继续输入,然而我输入N的时候,却进入了无限循环,为什么呢?
------解决思路----------------------
一般循环内连续调用scanf需要刷新缓存,在scanf前加rewind(stdin)
------解决思路----------------------
你用 "%d" 读入,当输入不是数字时(比如你的 N ),scanf 会失败,而输入 'N' 不会被读出。
这样你的 scanf 就会持续失败,然而什么也读不进来。
请参考 6 楼
------解决思路----------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
------解决思路----------------------
楼主你是没弄懂循环的真正意思,循环循环,说白了就是一次次的执行,执行完第一次又接着执行第二次。。。。。直到循环条件不满足为止。并不是执行完这次后就停在循环的最后那里。
就你写的这个代码,按N跳出第一个循环后会接着执行下面那个循环,当再按N后跳出第二个循环来到外面的循环,开始去测试1是不是真的(所有非0都是真的)所得的结果是真的,又接着执行里面的第一个循环。。。。。。。。。直到你关程序(因为1总是真的,所以总跳不出外面那个while)。