【问题标题】:Simple C program won't run. Crashes in CMD简单的 C 程序将无法运行。 CMD 崩溃
【发布时间】:2019-09-18 12:31:34
【问题描述】:

我是 C 编程新手,我正在尝试构建和执行我的第一个程序。我的第一个程序是 Hello, World 像你们许多人一样用 CMD 打印。效果很好。不过现在是在进行更大更好的项目,但我遇到了一个奇怪的问题。

我正在尝试使用标准 IO 操作(scanf 和 printf)制作一个基本的加法计算器,但它无法正常工作。

我的程序要求用户输入 2 个数字,然后它将显示所述计算的输出。该程序完美执行,直到 scanf 表达式发挥作用。在我输入要添加的 2 个数字后,CMD 提示符会在没有警告的情况下关闭,并且不会吐出答案或之后必须显示的文本。

我尝试了多种解决方案来解决这个问题,包括直接从我正在学习的网站复制和粘贴源代码,即使他们完美的代码也能获得相同的结果......只是在显示输出之前发生崩溃。我今天发帖是因为我想知道我的问题来自哪里,因为我只是不确定为什么这个程序不能按预期执行。在此先感谢,这是我正在使用的代码:

#include <stdio.h>

int main()

{
   int a, b, c;

   printf("Enter two numbers to add\n");
   scanf("%d%d", &a, &b);

   c = a + b;

   printf("Sum of the numbers = %d\n", c);

   return 0;
}

【问题讨论】:

  • 它对我来说很好用。你确定它正在崩溃而不是因为它完成而退出吗?
  • 你没有检查 scanf 的返回值
  • 学习使用调试器,它将帮助您真正快速编写代码
  • 您是否从正在开发的 IDE 运行程序?您是否尝试过从控制台运行它?在您拥有程序 exe 文件的文件夹中打开一个控制台并执行它。如果你从 IDE 运行它,当程序结束时,控制台会关闭(取决于你使用的 IDE)并且你看不到最后的 printf。
  • 发布确切的输入 - 这会有所帮助。

标签: c


【解决方案1】:

一旦控制台应用程序从 main 方法返回,相关的控制台窗口就会自动关闭。我假设您使用的是 Windows 操作系统。在这种情况下,在您的 return 0; 语句之前添加 system("pause");。 对于独立于平台的解决方案,您只需向用户显示提示并等待按键,然后再从主返回。正如@chux 在评论中指出的那样,必须清除输入缓冲区中剩余的任何字符(在这种情况下从 scanf 输入)。

    #include <stdio.h>

    int main()

    {
       int a, b, c;

       printf("Enter two numbers to add\n");
       scanf("%d%d", &a, &b);

       c = a + b;

       printf("Sum of the numbers = %d\n", c);
       //clear input buffer
       int d;
       while ((d = getchar()) != '\n' && d != EOF) { }
       printf("Press ENTER key to Continue\n");  
       getchar(); 
       return 0;
    }

【讨论】:

  • @chux 感谢您指出这一点。我错过了。添加了清除输入缓冲区的代码。
  • 次要:将clear input buffer 代码放在scanf("%d%d", &amp;a, &amp;b); 之后是一个很好的本地化。
【解决方案2】:

CMD 提示只是在没有警告的情况下关闭,并且从不吐出答案

似乎您正在 Windows 机器上打开一个新终端。我编译了代码,它可以工作。您的程序在打印答案后关闭,因此您根本看不到它。在结束之前人为地停止它。为了证明它在返回之前直接添加以下行:

scanf("%c", &a);

这将导致程序停止并等待输入。您将需要输入另一个数字,该数字基本上会被忽略,但会停止程序,以便您可以看到输出。这不是一个好的目标解决方案,因为您需要输入一些字符才能继续并退出,但它证明了这一点:)

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多