【问题标题】:C++ program (XCode) not running until I enter something into consoleC++ 程序(XCode)直到我在控制台中输入一些东西才运行
【发布时间】:2017-03-30 04:02:10
【问题描述】:

我正在为一个班级编写一个基于文本的游戏,并且在此问题之前我已经运行并运行了大部分游戏。

我今天打开它并尝试构建/运行它,它构建成功并且似乎正在运行,但是一些第一行代码是控制台的输出,直到我输入一些东西才会发生进入控制台,在提示打印之前不需要这样做:

这是我的主要内容的开始:

int main() {
string name;
cout << fixed << setprecision(2) << "What's your name? ";
cin >> name;
cin.ignore(INT_MAX, '\n');...

这是输出(在我输入 HELP 并按下回车之前什么都没有)

HELP?
What's your name? 

===========================================================
|                   Welcome,    HELP?!                    |
===========================================================    

而在今天之前,当我运行它时,它会输出“你叫什么名字?”,此时我会输入我的名字,然后它会打印欢迎词。

我觉得它一定很简单,因为它对我来说似乎是黑白的:为什么它要等待任何输入,而实际上我要求的第一件事就是向控制台输出一些东西?即使我将 cout 声明作为第一件事,它也可以这样工作。这是 XCode 的问题吗?

注意:对于文件中的每个 cin,它也会像这样处理输入,在我输入内容之前,问题和提示不会打印。

【问题讨论】:

  • 这个问题一直被问到,但由于某种原因,我找不到合适的重复项来对其进行分类。
  • 是的,在我看来这很常见,但我也找不到有效搜索此特定问题的方法。答案也对我不起作用。
  • 也许 XCode 输出窗口不像普通的 TTY,可能有自己的缓冲策略。如果你从终端运行你的程序,你有同样的问题吗?
  • 出于某种原因,我在尝试从终端运行时遇到了权限问题,但我也不热衷于此。但是我确实发现(我认为)我一直在使用 g++ 编译器,最近更新了 xcode,现在它没有使用相同的编译器。当我切换 IDE 并设法使用 g++ 编译器时,它又可以工作了。所以我猜不同的编译器需要刷新,而其他编译器不需要?这就是为什么当答案是刷新缓冲区时我如此困惑的原因,因为我以前从未这样做过。
  • 当前版本的 Xcode 有问题:stackoverflow.com/questions/43116829/…

标签: c++ xcode cin cout


【解决方案1】:

在 C++ 中写入 std::ostream 时,必须先刷新缓冲区,然后才能真正打印到控制台。您可以使用std::endlstd::flush 来执行此操作。

参见std::ostream 参考here

例子:

#include <iostream>
#include <string>

int main() {
    std::string s;
    std::cout << "Flushed with a line break." << std::endl;
    std::cin >> s;
    std::cout << "Flushed with no line break." << std::flush;
    std::cin >> s;

    return 0;
}

【讨论】:

  • 我以前从来不需要使用 endl 来使输出出现,而 flush 根本没有做任何事情。在我输入问题的答案之前,它仍然不会打印任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多