【问题标题】:C program console exits immediately after execution?C程序控制台执行后立即退出?
【发布时间】:2014-07-16 12:08:02
【问题描述】:

我正在使用 Code::Blocks 进行编程,是的,我是初学者,但每次我编写程序时,它都会在 IDE 中暂停,但在直接执行时不会暂停。

可能的原因是什么?谁能解释一下?

我的代码如下:

#include <stdio.h>
void main()
{
    float length,breadth,Area;
    printf("Enter the value of length and breadth \n\n");
    scanf("%f %f",&length,&breadth);
    printf("You entered length=%f and breadth=%f \n\n",length,breadth);
    Area= length * breadth;
    printf("The area of the rectangle is %f\n\n",Area);
    return 0;
}

【问题讨论】:

  • 这是一个控制台应用程序。它旨在从控制台运行。并且main 必须返回int
  • 下次请使用合适的格式。无需在每行代码后输入&lt;br&gt;(仍然不会将其格式化为代码),您只需突出显示代码并单击“代码”按钮即可。
  • 这就是控制台应用程序的工作方式!如果我输入 ls 并列出当前目录中的文件然后等待输入,我会很生气。
  • 程序完成后,IDE 会暂停。它与您的程序无关。
  • @mistgeek,打开终端并输入./&lt;program name&gt;。瞧,最后没有结束。

标签: c


【解决方案1】:

您必须告诉您的程序在最后等待输入,否则它将执行,完全按照您在代码中编写的操作并退出。 “好”的方法是从终端执行它(如果你在 Windows 上,则为 cmd)

#include <stdio.h>
int main()
{
    float length,breadth,Area;
    printf("Enter the value of length and breadth \n\n");
    scanf("%f %f",&length,&breadth);
    getchar(); // catch the \n from stdin
    printf("You entered length=%f and breadth=%f \n\n",length,breadth);
    Area= length * breadth;
    printf("The area of the rectangle is %f\n\n",Area);
    getchar(); // wait for a key
    return 0;
}

为什么在 scanf() 之后需要 getchar()?

当您输入您的数字时,您只需按 Enter 键即可完成。让我们看看你在读什么:一个浮点空格和另一个浮点数。 \n 不被 scanf() 消耗,而是留在输入缓冲区 (stdin) 中。下次使用从stdin 读取的函数时,该函数看到的第一个符号是\n(回车)。要从输入缓冲区中删除此\n,您必须在从输入缓冲区读取 1 个字符的 scanf() 之后调用 getchar()。我相信您以后会更频繁地遇到这种行为。

【讨论】:

  • 仍未解决:(控制台立即退出??
  • 这可能是由您的 scanf() 引起的。 scanf() 很可能将 \n (Enter) 留在输入缓冲区中,然后由最后一个 getchar 捕获。我对我的帖子进行了编辑。试试这个方法。
  • 是的,你帮助了我,谢谢,但你能解释一下为什么你在中间和最后使用 getchar() 吗?这不会在 Windows 版本上执行任何问题吗??
  • @mistgeek 在他的代码的 cmets 中提到
  • 是的,你做到了,但究竟为什么它是必要的,为什么它会有所作为??
【解决方案2】:

作为一个非常非常糟糕的做法,您可以只使用 getch 调用来停止执行(或任何产生小暂停的函数,getch 不是标准函数)。

【讨论】:

  • 是的,谢谢,请记住这一点 :) 但请帮我解决这个问题??
  • @mistgeek ,你可以使用 getch();在你的程序结束之前返回
  • 或者,您可以从标准命令行运行程序。它应该运行,然后返回到提示符。
  • 嗯,谢谢你的帮助,但有人帮助了我,但谢谢你 :)
【解决方案3】:

程序在执行后不应该暂停,这是 IDE 添加的功能。如果您希望执行暂停并等待一些输入,您应该指示它这样做。例如,如果您在 Windows 上,您可以添加一行:

system("pause");

就在return 0; 之前。这是不可取的,但在某些情况下可能会帮助您进行调试。该标准还要求您的主要功能是 int,而不是 void。所以你最好习惯写int main而不是void main

【讨论】:

  • 谢谢你帮助我 :) 但我有一个问题??如果我执行 system("PAUSE") 是否适用于所有 Windows 操作系统??
  • @mistgeek 是的
  • @mistgeek 是的,它有效。但是,这在 linux 系统上不起作用
  • 是的,谢谢伙计 p.s 我对 linux 系统一无所知 :)
  • 它不能在 Windows 上可靠地工作。用户可以轻松替换pause 实用程序或首先找到另一个pause 程序。
【解决方案4】:

你需要使用 getch();在程序结束时(在 return 语句之前) Getch 按住输出屏幕。

【讨论】:

  • -1 这已由 NightwalkerUY 作为答案发布。
猜你喜欢
  • 2014-09-04
  • 2011-02-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多