在C中扫描循环

时间:2013-02-27 15:56:54

标签: c while-loop infinite-loop

所以我的问题如下。

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

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

谢谢:)

4 个答案:

答案 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)

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

您可能在其他地方遇到问题。

你可以在这里查看。:

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