所以我编写了这个程序,在我完成后,我尝试运行它,但由于某些原因,控制台上没有任何显示。我经历了多次代码并尝试了多种方式来执行相同的功能,这基本上是继续从用户获取输入直到他/她进入0,然后显示最大和第二大数字,如果用户输入0并且没有可用的号码然后继续检查。我想可能存在无限循环或其他一些问题。这是代码:
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
void main()
{
int input,z;
int large,small,counter=0;
bool a=false;
while (1){
if(scanf("%d\n",&input)>0)
{
small=input;
counter++;
if(small>large)
{
z=small;
small=large;
large=z;
}
}
else if(scanf("%d\n",&input)<0)
{
printf("Please enter a positive value\n");
}
else if(scanf("%d\n",&input)==0)
{
if(small>0 && large>0)
{
printf("There are in total %d positive integers entered",counter);
printf("The largest number is %d, while the second largest is %d", large,small);
a=true;
break;
}
else
{
printf("You have to enter atleast two positive integers");
}
}
}
}
任何形式的帮助将不胜感激,谢谢。
答案 0 :(得分:1)
如果你仔细研究程序的逻辑,你会发现它没有意义。例如,如果输入了数字,则永远不会打印任何内容。
答案 1 :(得分:1)
scanf
函数不返回输入,它返回它读取的数字。
由于您的代码一次只读取一个数字,scanf
将始终返回1
,从而导致无限循环。
要解决此问题,请在分支代码外提升scanf
电话:
while (1) {
scanf("%d", &input);
if (input > 0) ...
else if (input < 0) ...
else ...
}
您的代码中存在更多错误(Rohan指出其中一个)但这应该可以解决黑屏问题。
答案 2 :(得分:1)
每次检查输入的值时,您正在执行另一次scanf()或尝试读取新值,而不是检查输入的数字的值。您检查的值是scanf()的返回值,但输入的数字实际存储在“input”变量中。所以,是的,这里有一些事情,但你基本上处于无限循环中,因为输入的值没有被正确读取或评估。
C函数scanf()不使用换行符。而是使用:
scanf("%d", &input);
此外,在您定义它时,将“大”变量初始化为0(它的值不为0并且会给您不可预测的结果):
int large = 0, small, counter = 0;
你想要做的只是在你的while循环顶部有一个scanf()来读取一个数字。之后,你的if应该测试“输入”的值:
而(1) {
scanf("%d", &input);
if (input > 0) /* positive number entered */
{
/* do something */
} else if (input < 0) /* negative number entered */
{
/* print error */
} else /* no need to test value since it must be 0 at this point */
/* do stuff */
}
}
快乐的C编码! ; - )