【问题标题】:C Program causing black screen on the consoleC程序导致控制台黑屏
【发布时间】:2013-10-12 02:39:21
【问题描述】:

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

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

【问题讨论】:

  • largesmall 比较时未初始化。

标签: c while-loop scanf


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 我第一次编程就是这样,刚刚又试了一遍,还是黑屏。
【解决方案2】:

每次检查输入的值时,您都在执行另一个 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 编码! ;-)

【讨论】:

  • 我再次尝试了这个,但由于某种原因,我得到了同样的黑屏。
  • 如果“黑屏”意味着它是空白的,因为没有打印任何内容,那么您是正确的,因为在 scanf() 要求用户输入数字之前没有 printf()。按照我和 Lambda Fairy 的说明进行更改,然后添加 printf("enter number: ");在 scanf() 之前。您会发现它按原始问题的预期工作。运行它并玩弄它,输入正数和负数,最后输入 0,你会看到。在发布对您的问题的回复之前,我曾尝试过并对其进行了测试。
  • 黑屏是指即使我尝试在控制台中输入内容,我也不能。我添加了一条 printf 语句并进行了您和 lambda 仙女概述的更改,但我仍然遇到无法在控制台中输入任何内容的问题。
  • 嗯。这很奇怪,但不是代码。我复制并粘贴了您的代码,进行了更改,编译(gcc)并在 Windows cmd 窗口中运行它。它必须是您正在使用的“控制台”工具或您的环境。你看到 printf() 值了吗?当您输入一个数字并按回车键时,打印是否向上滚动?还是屏幕完全没有运动?你的环境、编译器和控制台工具是什么?
  • 我正在使用代码块,不,我无法在控制台上输入任何内容或查看任何内容。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多