所以我的问题是以下。while循环扫描C
int n=0;
while(n<=0)
scanf("%d",&n);
此代码进入无限循环,我不知道为什么。当用户输入数字> 0时,循环应该停止。
并感谢:)
所以我的问题是以下。while循环扫描C
int n=0;
while(n<=0)
scanf("%d",&n);
此代码进入无限循环,我不知道为什么。当用户输入数字> 0时,循环应该停止。
并感谢:)
我想你应该改变你的编译器,因为我得到了很好的结果。
您可能在其他地方遇到问题。
您可以点击这里:
代码:
#include<stdio.h>
main()
{
int n = 0;
while (n <= 0)
scanf("%d",&n);
printf("%d",n);
}
Input:
-5
4
Output:
4
好的谢谢。我在linux上使用gcc。 – user2116077 2013-02-27 16:24:19
我试着用3个编译器。它的工作正常。 – Arpit 2013-02-27 16:25:10
对不起,我非常感谢。我明天会和老师谈谈,这似乎是一个海湾合作委员会的问题。 – user2116077 2013-02-27 16:28:13
while (n <= 0)
// something
意味着“做一些事情而n
值小于或等于0
”。只要确保在条件n <= 0
正在评估时n
已初始化。使用未初始化的变量会产生未定义的行为。
你应该这样做:
int n = 0;
while (n <= 0)
scanf("%d\n",&n);
是的,我知道,所以当扫描得到n> 10时,它应该停止对吗? – user2116077 2013-02-27 15:59:26
@ user2116077它当然应该 - 看到我的答案。 – 2013-02-27 16:00:06
已经做到了,相同的无限循环。 – user2116077 2013-02-27 16:08:14
一遍又一遍又一遍又一遍......
stdin
(通常)行缓冲 - 一个具有按<enter>
使终端传输字符到你的程序。所以现在缓冲区中有一个悬挂的换行符,并且scanf()
将在下一次迭代期间尝试读取它,但它不是一个整数,所以它会失败并且不会更改变量的内容。为了解决这个问题,使scanf()
吃换行符:
scanf("%d\n", &number);
(哦,是的,n
也用于初始化,但似乎你的代码进入循环无论如何,所以这不是问题做初始化,。虽然,否则你将面临其他奇怪的错误。)
我已经试过了,没有工作,但无论如何感谢:) – user2116077 2013-02-27 16:02:13
@ user2116077从这个答案的质量(抱歉,但...)推导出来 - 你代码中可能存在其他问题/语义错误/未定义的行为。检查这些。 – 2013-02-27 16:03:00
@ H2CO3在C++它是UB,但在c的情况下这是真的吗? – Arpit 2013-02-27 16:03:19
既然你声称尝试过的东西,他们没有工作(虽然我不明白为什么)让我们尝试别的。让我们使用程序员的最好的朋友: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);
这将让你看到它在读什么电脑是做什么值,因为它读取它们。尝试用上面的代码替换你的代码,让我们看看会发生什么。
现在它停止后,我再次进入,这是更好的。 – user2116077 2013-02-27 16:14:57
告诉我们计算机打印出什么... – 2013-02-27 16:15:17
请输入数字:5 我看到你输入了:5 完成循环。 n的值是:5 – user2116077 2013-02-27 16:19:09
代码可能永远不会进入循环可言 - 因为'N'未初始化。你怎么知道它在循环?你输入了一个数字,然后按ENTER? – 2013-02-27 16:00:16
我刚刚编译了这个,当我输入值1并按回车时,它退出循环。我认为你的问题在于你的程序中的其他地方。你可以尝试把'n'变成'volatile int',以确保你没有得到优化问题。 – mrh 2013-02-27 16:17:44
我*非常*怀疑这个问题是由优化器造成的,'volatile'不会修复它。 – 2013-02-27 16:18:44