Getline问题

时间:2011-06-16 21:11:54

标签: c++

我有以下代码:

system("CLS");
string title;
string content;
cout << "Get title." << endl;
getline(cin,title);
cout << "Get content." << endl;
getline(cin,content);

问题是 - 应用程序不是要求tittle,我有获取标题,获取内容然后等待用户输入,它不是在获得title.b之后等待用户输入我必须添加任何中断或smth?
或者,从用户输入读取整个文本行不是最好的主意吗?

3 个答案:

答案 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();
希望这有效。