c++ - 为什么 Visual Studio 的控制台消失了?

标签 c++ visual-studio console-application

<分区>

情况 1:在这种正常情况下,控制台出现

int main() {
    string s4(4,'a');
    string s3(3, 'b');

    cout << s3+s4<<endl;

    cin.get();
    return 0;
}

案例 2:我添加了一个 cin >> 并且控制台变得消失,为什么?

int main() {
    string s4(4,'a');
    string s3(3, 'b');
    string word;
    cin >> word;
    cout << s3+s4+word <<endl;

    cin.get();
    return 0;
}

情况 3: 我再添加一个 cin.get() 并且控制台再次出现,为什么?

int main() {
    string s4(4,'a');
    string s3(3, 'b');
    string word;
    cin >> word;
    cout << s3+s4+word <<endl;

    cin.get();
    cin.get();
    return 0;
}

最佳答案

“问题”是输入缓冲区中剩余字符(在您的示例中是换行符)。

案例 3 中的第一个 cin.get() 读取 \n,第二个等待新字符。

std::cin 因导致输入问题而臭名昭著,因为它不会从流中删除换行符。

此外,读取字符串时,它会在空格处中断:如果您输入的内容超过一个单词,则只会加载第一个单词(将空格和后面的单词留在输入流中)。

要提取整行文本,全局函数的字符串重载 getline是更好的选择。


你不应该添加“棘手的”命令来保持控制台打开(cin.get(), system("pause")...):此后您必须记住将它们从“生产”代码中删除。

您可以不使用调试器模式(CTRL + F5)运行您的程序,Visual Studio 将保持控制台应用程序窗口打开,直到您按下一个按钮(只需检查 Project -> Properties -> Linker -> System -> Sub System -> Console (/SUBSYSTEM:CONSOLE) 中的设置)。

当然,如果您正在调试 (F5),return 0; 上的断点是最佳选择。

关于c++ - 为什么 Visual Studio 的控制台消失了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36216514/

相关文章:

android - 如何在sqlite3中获取带有查询数据的列名?

c# - 控制台应用程序在鼠标单击时卡住

c++ - 如何使用 boost::object_pool 作为 boost::multi_index 分配器?

c++ - 如何正确使用 C++ 强类型枚举?

c++ - 缓存行大小

c++ - 检测远程桌面连接何时启动?

c++ - Visual Studio 调试器在内联代码中速度变慢

c# - 将 Blazor 项目与库项目引用发布到 Azure

visual-studio - 如何重新安装 Visual Studio.net 的试用版?

delphi - 在控制台应用程序中屏蔽密码输入