首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Getline问题

Getline问题
EN

Stack Overflow用户
提问于 2011-06-17 05:11:54
回答 3查看 716关注 0票数 1

我有以下代码:

代码语言:javascript
复制
system("CLS");
string title;
string content;
cout << "Get title." << endl;
getline(cin,title);
cout << "Get content." << endl;
getline(cin,content);

问题是-应用程序没有询问标题,我已经获取标题,获取内容,然后等待用户输入,它不是在获取title.bDo之后等待用户输入,我必须添加任何中断或smth?

或者,这不是从用户输入中读取整个文本行的最好主意?

EN

回答 3

Stack Overflow用户

发布于 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' );来刷新输入缓冲区--但要确保在此过程中不会丢弃有价值的输入)。

票数 3
EN

Stack Overflow用户

发布于 2011-06-17 05:26:40

我敢打赌,你会有一个类似于菜单的东西来选择选项(作为一个数字类型),然后你会试着去读这些行。

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

票数 2
EN

Stack Overflow用户

发布于 2011-07-14 12:45:40

这是因为当您使用getline()时,它会忽略行尾的换行符并将其提供给输入队列,因此当下次调用getline函数时,它会遇到前一个getline()函数丢弃的换行符,因此它会将其视为输入字符串的末尾。所以这就是为什么它不需要你的任何输入。你可以使用类似这样的东西

代码语言:javascript
复制
getline(cin,title);
cin.get();

希望这能起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6378662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档