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