gpt4 book ai didi

c++ - Linux 中的 Cout 和 Cin - 看不到控制台

转载 作者:IT王子 更新时间:2023-10-29 00:53:09 27 4
gpt4 key购买 nike

我刚从 Windows 迁移到 Linux,我尝试创建一个简单的应用程序来打开控制台、显示消息并等待按键关闭。我在 Windows 上创建了它并且它可以工作,然后我将文件移动到 Linux。没有做任何更改,只是用 g++ 编译它,我没有得到任何错误。问题是在 Linux (Ubuntu 12.04) 上我看不到控制台和一些消息要求我在关闭前按任意键。我的代码就这么简单:

#include <iostream>
#include <cstdio>

int main() {
cout << "Writing file...\n";

FILE *myfile = fopen("testfile.txt", "w");
fwrite("test", sizeof(char), 4, myfile);
fclose(myfile);

cout << "Press any key to exit...\n";
cin.ignore();
return 0;
}

在 Windows 上,当我启动可执行文件时,控制台窗口会显示消息并在按任意键时关闭。在 Linux 上,当我执行程序时,我什么也得不到。它确实创建了 testfile.txt 文件并插入文本,因此 cstdio 相关功能确实有效,但我看不到任何带有这些消息的控制台,我不明白为什么。也许我不知道如何在 Linux 上打开一个简单的可执行文件。我想要的是双击它并看到一个带有两条简单消息的控制台。你认为我做错了什么?谢谢!

此外,我使用 g++ 编译 cpp 文件:g++ -Wall -s -O2 test.cpp -o test

最佳答案

在 Windows 上,应用程序的“自然”形式是 GUI 应用程序。当您运行控制台应用程序时,系统会创建一个窗口来运行控制台并在该窗口中运行该应用程序。这是由 Windows 完成的,它不是 C++ 的固有属性,也不是您编写的代码所暗示的。

C++ 不会自动执行此操作,类 UNIX 系统也不会为您执行此操作。

在类 UNIX 系统上,“自然”类型的应用程序(可以说)是控制台应用程序,您通常会控制台或终端运行它们。

当您运行您的程序时,输出会进入您的 X11 session 正在运行的终端,但您看不到它,因为 X11 session 正在控制您的显示。

所以要得到你想要的行为,首先打开一个终端,然后运行程序。

要使程序在终端中运行,请尝试运行类似 xterm -e ./test 的程序

要使该操作自动化,您可以使用类似的东西来拼凑它:

#include <iostream>
#include <string>
#include <unistd.h>
#include <cstdio>

int main(int argc, char** argv)
{
if (argc > 1 && std::string(argv[1]) == "-xterm")
{
if (::execl("/usr/bin/xterm", "xterm", "-e", argv[0], (char*)NULL))
{
std::perror("execl");
return 1;
}
}

std::cout << "Writing file...\n";

FILE* myfile = std::fopen("testfile.txt", "w");
std::fwrite("test", sizeof(char), 4, myfile);
std::fclose(myfile);

std::cout << "Press any key to exit...\n";
std::cin.get();
}

现在,如果您使用参数 -xterm 运行程序它将在 xterm 中运行。

注意我修复了您的不可移植代码以使用 std::对来自<cstdio>的名字的资格

关于c++ - Linux 中的 Cout 和 Cin - 看不到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13809611/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com