1

所以我的问题如下。

int n=0;
while(n<=0)
    scanf("%d",&n);

这段代码进入一个无限循环,我不知道为什么。当用户输入一个大于 0 的数字时,循环应该停止。

谢谢:)

4

4 回答 4

4

一遍又一遍,一遍又一遍……

stdin(通常)是行缓冲的 - 必须按下<enter>才能使终端将字符传输到您的程序。所以现在缓冲区中有一个悬空的换行符,并且scanf()会在下一次迭代中尝试读取它,但它不是整数,所以它失败并且不会改变变量的内容。要解决这个问题,scanf()请使用换行符:

scanf("%d\n", &number);

(哦,是的,n也未初始化使用,但似乎您的代码无论如何都进入了循环,所以这不是问题。但请初始化它,否则您面临其他奇怪的错误。)

于 2013-02-27T15:59:29.620 回答
1
while (n <= 0)
    // something

意思是“当值小于或等于时做某事n0。只需确保在评估n条件时对其进行初始化。n <= 0使用未初始化的变量会产生未定义的行为

你应该做:

int n = 0;
while (n <= 0)
    scanf("%d\n",&n);
于 2013-02-27T15:58:14.390 回答
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);

这将让您看到计算机正在做什么以及它在读取它们时读取的值。尝试用上面的代码替换你的代码,让我们看看会发生什么。

于 2013-02-27T16:09:27.703 回答
0

我认为你应该改变你的编译器,因为我得到了很好的结果。

你可能在其他地方有问题。

你可以在这里查看:

http://ideone.com/C4Yobi

代码:

#include<stdio.h>
main( )
{
int n = 0;
while (n <= 0)
    scanf("%d",&n);
printf("%d",n);
}

Input:
-5
4
Output:
4
于 2013-02-27T16:18:44.073 回答