2013-02-27 81 views
1

所以我的问题是以下。while循环扫描C

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

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

并感谢:)

+2

代码可能永远不会进入循环可言 - 因为'N'未初始化。你怎么知道它在循环?你输入了一个数字,然后按ENTER? – 2013-02-27 16:00:16

+0

我刚刚编译了这个,当我输入值1并按回车时,它退出循环。我认为你的问题在于你的程序中的其他地方。你可以尝试把'n'变成'volatile int',以确保你没有得到优化问题。 – mrh 2013-02-27 16:17:44

+0

我*非常*怀疑这个问题是由优化器造成的,'volatile'不会修复它。 – 2013-02-27 16:18:44

回答

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 
+0

好的谢谢。我在linux上使用gcc。 – user2116077 2013-02-27 16:24:19

+0

我试着用3个编译器。它的工作正常。 – Arpit 2013-02-27 16:25:10

+0

对不起,我非常感谢。我明天会和老师谈谈,这似乎是一个海湾合作委员会的问题。 – user2116077 2013-02-27 16:28:13

1
while (n <= 0) 
    // something 

意味着“做一些事情而n值小于或等于0。只要确保在条件n <= 0正在评估时n已初始化。使用未初始化的变量会产生未定义的行为

你应该这样做:

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

是的,我知道,所以当扫描得到n> 10时,它应该停止对吗? – user2116077 2013-02-27 15:59:26

+0

@ user2116077它当然应该 - 看到我的答案。 – 2013-02-27 16:00:06

+0

已经做到了,相同的无限循环。 – user2116077 2013-02-27 16:08:14

4

一遍又一遍又一遍又一遍......

stdin(通常)行缓冲 - 一个具有按<enter>使终端传输字符到你的程序。所以现在缓冲区中有一个悬挂的换行符,并且scanf()将在下一次迭代期间尝试读取它,但它不是一个整数,所以它会失败并且不会更改变量的内容。为了解决这个问题,使scanf()吃换行符:

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

(哦,是的,n也用于初始化,但似乎你的代码进入循环无论如何,所以这不是问题做初始化,。虽然,否则你面临其他奇怪的错误。)

+0

我已经试过了,没有工作,但无论如何感谢:) – user2116077 2013-02-27 16:02:13

+0

@ user2116077从这个答案的质量(抱歉,但...)推导出来 - 你代码中可能存在其他问题/语义错误/未定义的行为。检查这些。 – 2013-02-27 16:03:00

+0

@ H2CO3在C++它是UB,但在c的情况下这是真的吗? – Arpit 2013-02-27 16:03:19

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); 

这将让你看到它在读什么电脑是做什么值,因为它读取它们。尝试用上面的代码替换你的代码,让我们看看会发生什么。

+0

现在它停止后,我再次进入,这是更好的。 – user2116077 2013-02-27 16:14:57

+0

告诉我们计算机打印出什么... – 2013-02-27 16:15:17

+0

请输入数字:5 我看到你输入了:5 完成循环。 n的值是:5 – user2116077 2013-02-27 16:19:09