C程序在控制台上导致黑屏

时间:2013-10-04 23:45:16

标签: c while-loop scanf

所以我编写了这个程序,在我完成后,我尝试运行它,但由于某些原因,控制台上没有任何显示。我经历了多次代码并尝试了多种方式来执行相同的功能,这基本上是继续从用户获取输入直到他/她进入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");
     }
 }
}
}

任何形式的帮助将不胜感激,谢谢。

3 个答案:

答案 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编码! ; - )