为什么Visual Studio的控制台会消失?

时间:2016-03-25 08:28:23

标签: 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;
}

1 个答案:

答案 0 :(得分:1)

&#34;问题&#34;是输入缓冲区中剩下的字符(在你的例子中是一个换行符)。

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

std::cin以引发输入问题而臭名昭着,因为它没有从流中删除换行符。

另外,读取字符串时,它会在空格中断开:如果输入的内容多于一个单词,则只会加载第一个单词(保留空格和后面的单词仍在输入流中)。

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

你不应该添加&#34;棘手的&#34;保持控制台处于打开状态的命令(cin.get()system("pause") ...):此后,您必须记住将它们从&#34; production&#34;中删除。代码。

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

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