Getline problem

Getline problem

本文关键字:problem Getline      更新时间:2023-10-16

我有以下代码:

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

问题是,应用程序不是在问标题,我有获取标题,获取内容,然后等待用户输入,它不是在获取标题后等待用户输入。我必须添加任何中断或smth吗
或者,这不是从用户输入中读取整行文本的最佳主意?

如果在system()调用之前有一个cin >> something;调用。

例如,将输入作为一个整数。当cin >> myintvar;(或类似)时,整数被放在myintvar中,并且'\n'在流中被发送。getline拾取n作为输入行结束的指示,因此它被有效地"跳过"。

cin >>更改为getline()或者调用cin.ignore()来获取'n'(或者更好的是,调用cin.ignore (std::numeric_limits<std::streamsize>::max(), 'n' );来刷新输入缓冲区——但要确保在这个过程中没有丢弃有价值的输入)。

我敢打赌,您有一个类似于菜单的东西来选择选项(作为数字类型),然后尝试读取行。

发生这种情况是因为在std::cin读取某些值后,剩余的'\n'尚未处理,解决方案是包括#include <limits>,然后将std::cin.ignore(std::numeric_limits<streamsize>::max(),'n'); 放在getline(cin,title); 之前

这是因为当您使用getline()时,它会忽略行末尾的换行符,并将其输入到输入队列中,因此当您的getline函数下次被调用时,它遇到上一个getline(。所以这就是为什么它不需要你的任何意见。你可以使用类似的东西

getline(cin,title);
cin.get();

希望这能奏效。