案例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;
}
答案 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;
上的断点是最佳选择。