我有以下代码:
system("CLS");
string title;
string content;
cout << "Get title." << endl;
getline(cin,title);
cout << "Get content." << endl;
getline(cin,content);问题是-应用程序没有询问标题,我已经获取标题,获取内容,然后等待用户输入,它不是在获取title.bDo之后等待用户输入,我必须添加任何中断或smth?
或者,这不是从用户输入中读取整个文本行的最好主意?
发布于 2011-06-17 05:22:05
如果您在system()调用之前进行了cin >> something;调用。
例如,将输入转换为整数。如果为cin >> myintvar; (或类似),则将整数放在myintvar中,并在流中发送'\n‘。getline拾取\n作为一行输入的结束指示,因此它实际上被“跳过”。
要么将cin >>更改为getline(),要么调用cin.ignore()来获取'\n'(或者更好的做法是,调用cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n' );来刷新输入缓冲区--但要确保在此过程中不会丢弃有价值的输入)。
发布于 2011-06-17 05:26:40
我敢打赌,你会有一个类似于菜单的东西来选择选项(作为一个数字类型),然后你会试着去读这些行。
发生这种情况是因为在std::cin读取一些值后,剩余的'\n‘还没有被处理,解决方案是包含#include <limits>,然后将std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');放在getline(cin,title);之前
发布于 2011-07-14 12:45:40
这是因为当您使用getline()时,它会忽略行尾的换行符并将其提供给输入队列,因此当下次调用getline函数时,它会遇到前一个getline()函数丢弃的换行符,因此它会将其视为输入字符串的末尾。所以这就是为什么它不需要你的任何输入。你可以使用类似这样的东西
getline(cin,title);
cin.get();希望这能起作用。
https://stackoverflow.com/questions/6378662
复制相似问题