【问题标题】:How to exit console screen in C language如何在C语言中退出控制台屏幕
【发布时间】:2018-12-27 17:12:26
【问题描述】:

我正在尝试退出控制台屏幕,即关闭屏幕我可以使用什么命令来实现此目的。

void main()
{
    int n;
    printf("Please enter a number less than 5");
    scanf("%d", &n);
    if(n <= 5)
       printf("good");
     else
     {
        printf("You entered a number above so the program will exit");
        //here i need to call a function or use a command that will close
        // the console screen;
     }
}

任何帮助将不胜感激,谢谢

【问题讨论】:

  • main 函数应该返回一个int
  • main的正确定义是int main(void)...
  • 您的程序将按原样自动关闭,具体取决于它的编译和启动方式。您定义 main 函数的方式绝对不会影响它是否关闭。尝试在发布模式下编译而不是调试,反之亦然,以及在控制台中运行程序而不是通过 IDE 启动它。只需使用这些参数,看看会发生什么。
  • “按任意键退出...”不是您的代码正在执行的操作 - 您是如何启动程序的?该消息很可能是由您启动程序时使用的任何“shell”发出的——例如 IDE。请放心,您的程序已终止 - 启动它的程序正在“退出”。例如,从其 Windows 资源管理器图标运行它,以查看您的代码本身的行为 - 它会在您看到 any 输出之前终止并关闭其窗口。不知道为什么 void / int main 会有所作为,但这又是特定于您的 IDE 而不是您的代码的行为。
  • 在 Windows 上,您可以使用 FreeConsole 关闭控制台:docs.microsoft.com/en-us/windows/console/closing-a-console

标签: c


【解决方案1】:

C11 标准n1570 不知道“控制台屏幕”(我猜你说的是terminal emulator 运行你的程序)。请注意,C11 没有提及“屏幕”或“键盘”(只有 standard streams,而且很多时候stdout不是“控制台”)和许多计算机(例如大多数 Internet 服务器或超级计算机,甚至你的手机......)两者都没有。此外,您的程序可以使用redirectionspipeline 运行(甚至在Windows 上),然后它没有控制台(所以您的问题在这种常见情况下没有任何意义)。

所以总的来说,没有办法以标准方式做你想做的事(因为它没有任何意义)。

也许您的operating system 提供了一些(特定于操作系统的)方法来实现这一点。因此,请调查与您的系统相关的操作系统 API(例如,Windows 上的 WinAPI,或 syscalls(2) 中列出的 Linux 系统调用)。

也许你想使用一些终端相关的库,比如ncurses

如果您的终端遵循ANSI escape code 约定,您可以遵循它们。

否则,请考虑让您的程序包含一些GUI。为此,您实际上需要一些widget toolkit(例如QtGTK 等。)

您也可以考虑使用inter-process communicationdesktop environment。如何做到这一点(甚至可能)取决于操作系统和桌面,并且可能与session 管理有关。

顺便说一句,请记住 stdout 通常是缓冲的(也许是行缓冲的)。你最好用\n 结束你的printf 控制字符串和/或调用fflush

【讨论】:

  • 是的,我正在考虑终端,我在 Windows 操作系统上,有没有办法解决这个问题,或者无论如何都无法实现
  • 即使在 Windows 上,您也可以进行重定向(这很常见)。在那种情况下,你的问题没有任何意义。
  • @sam :您在 Windows 上运行的事实是重要的信息,应该在您的问题中或至少标记,因为窗口管理是特定于平台的。
  • 我认为在 Windows 中,“控制台”一词是正确且模棱两可的。控制台模式程序不需要从终端模拟器启动(并且在 Windows 中,命令 shell 本身并不在终端模拟器中运行。它本身就是一个“控制台模式”程序)。如果您要从终端或在 Windows 上运行 cmd 或 powershell 会话的代码,则该窗口不是程序要关闭的,因为该程序作为 shell 的子项运行。似乎这里的混乱是由程序的执行方式引起的——它不拥有父窗口,因为它不是直接启动的。
【解决方案2】:

在窗口操作系统或执行环境中,控制台窗口将立即关闭进程终止,因此不清楚您在此处询问的内容,因为在您的示例中,无论输入什么输入,程序都会终止。

如果您从 IDE 运行代码,IDE 通常会创建一个控制台进程并在其中启动您的代码。在这种情况下,控制台不是您的应用程序“拥有”,而是作为 进程执行;在这种情况下,窗口将保持打开状态,直到 IDE 启动的父进程关闭。同样,如果您从命令外壳启动程序。即使有可能,进程尝试关闭其父进程也可能是不合理的行为。

可以在进程继续运行时“隐藏”控制台窗口,这可能是您要问的;这样做的方法是特定于平台的,您没有指定;对于 Windows,这样的问题将与 Win32 programming hiding console window 重复。但是,如果进程不是直接启动而是从其他控制台进程启动,则这些方法很可能不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2010-10-03
    相关资源
    最近更新 更多