所以我的问题如下。
int n=0;
while(n<=0)
scanf("%d",&n);
这段代码进入无限循环,我不知道为什么。当用户输入数字时> 0,循环应该停止。
谢谢:)
答案 0 :(得分:4)
一遍又一遍......
stdin
(通常)是行缓冲的 - 必须按<enter>
才能使终端将字符传输到您的程序。所以现在缓冲区中有一个悬空的换行符,scanf()
将尝试在下一次迭代中读取它,但它不是整数,因此它失败并且不会更改变量的内容。要解决此问题,请让scanf()
吃掉换行符:
scanf("%d\n", &number);
(哦,是的,n
也是未初始化的,但似乎你的代码无论如何进入循环,所以这不是问题。做初始化,,否则你< strong>将面对其他奇怪的错误。)
答案 1 :(得分:1)
while (n <= 0)
// something
表示“在n
的值小于或等于0
”时执行某些操作。只需确保在评估条件n
时初始化n <= 0
。使用未初始化的变量会产生未定义的行为。
你应该这样做:
int n = 0;
while (n <= 0)
scanf("%d\n",&n);
答案 2 :(得分:0)
既然你声称已经尝试过并且它们不起作用(虽然我不明白为什么)让我们尝试别的东西。让我们使用程序员最好的朋友:printf
。如何尝试运行此代码:
int n = 0;
while(n <= 0)
{
printf("Please enter a number: ");
scanf("%d\n", &n);
printf("I see you entered: %d\n", n);
}
printf("Done with the loop. The value of n is: %d\n", n);
这将让您了解计算机正在执行的操作以及读取它时读取的值。尝试用上面的代码替换代码,让我们看看会发生什么。
答案 3 :(得分:0)
我认为你应该改变你的编译器,因为我得到了很好的结果。
您可能在其他地方遇到问题。
你可以在这里查看。:
代码:
#include<stdio.h>
main( )
{
int n = 0;
while (n <= 0)
scanf("%d",&n);
printf("%d",n);
}
Input:
-5
4
Output:
4