1

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

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

4

3 回答 3

1

如果您仔细浏览程序的逻辑,您会发现它没有意义。例如,如果输入了一个数字,则永远不会打印任何内容。

于 2013-10-04T23:53:12.137 回答
1

scanf函数不返回输入,它返回读取了多少个数字

由于您的代码一次读取一个数字,scanf因此将始终 return 1,从而导致无限循环。

要解决此问题,scanf请在分支代码之外调用:

while (1) {
    scanf("%d", &input);

    if (input > 0) ...
    else if (input < 0) ...
    else ...
}

您的代码中有更多错误(Rohan 指出了其中一个错误),但这应该可以解决黑屏问题。

于 2013-10-04T23:54:40.023 回答
1

每次检查输入的值时,您都在执行另一个 scanf() 或尝试读取新值,而不是检查输入的数字的值。您检查的值是 scanf() 的返回值,但输入的数字实际上存储在您的“输入”变量中。所以是的,这里发生了一些事情,但你基本上处于无限循环中,因为输入的值没有被正确读取或评估。

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

于 2013-10-05T01:07:30.827 回答