我有以下代码:
system("CLS");
string title;
string content;
cout << "Get title." << endl;
getline(cin,title);
cout << "Get content." << endl;
getline(cin,content);
问题是 - 应用程序不是要求tittle,我有获取标题,获取内容然后等待用户输入,它不是在获得title.b之后等待用户输入我必须添加任何中断或smth?
或者,从用户输入读取整个文本行不是最好的主意吗?
答案 0 :(得分:3)
如果您在cin >> something;
来电之前有system()
来电。
例如,将输入转换为整数。当cin >> myintvar;
(或类似)时,整数放在myintvar
中,'\ n'在流中发送。 getline
选择\n
作为输入行结束的指示,因此它被有效地“跳过”。
将cin >>
更改为getline()
或者致电cin.ignore()
以获取'\n'
(或者更好,调用cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n' );
来刷新输入缓冲区 - 但请确保您不会在此过程中丢弃有价值的输入。)< / p>
答案 1 :(得分:2)
我敢打赌,你有一个类似于选择选项的菜单(作为数字类型),之后你会尝试阅读这些行。
这是因为在std :: cin读取了一些值之后,剩余的'\ n'尚未处理,解决方案是包含#include <limits>
,然后将std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
放在getline(cin,title);
之前}
答案 2 :(得分:0)
这是因为当你使用getline()时它会忽略行末尾的换行符并将其输入到输入队列中,所以当下次调用你的getline函数时它会遇到前一个getline丢弃的换行符。 ()因此它认为输入字符串的结尾。这就是为什么它不接受你的任何输入。你可以使用这样的东西
getline(cin,title);
cin.get();
希望这有效。