getline 无法正常工作?可能是啥原因? [复制]

Posted

技术标签:

【中文标题】getline 无法正常工作?可能是啥原因? [复制]【英文标题】:getline not working properly ? What could be the reasons? [duplicate]getline 无法正常工作?可能是什么原因? [复制] 【发布时间】:2011-10-02 18:04:13 【问题描述】:

可能重复:getline not asking for input?

在我的程序中发生了一些独特的事情。 以下是一些命令集:

 cout << "Enter the full name of student: ";  // cin name
 getline( cin , fullName );

 cout << "\nAge: ";  // cin age
 int age;
 cin >> age ;

cout << "\nFather's Name: ";  // cin father name
getline( cin , fatherName );

cout << "\nPermanent Address: ";  // cin permanent address
getline( cin , permanentAddress );

当我尝试将这个 sn-p 与整个代码一起运行时。输出程序的工作方式如下:

输出:

Enter the full name of student:
Age: 20

Father's Name:
Permanent Address: xyz

如果你注意到了,程序没有问我全名,而是直接问我年龄。然后它也跳过了父亲的名字,问了永久地址。 这可能是什么原因?

因为代码太大,我很难贴出整个代码。

【问题讨论】:

请将程序输出复制并粘贴到您帖子的格式化部分。图像具有随时间消失的特性,通常会产生红十字。 getline 无法正常工作? "select isn't broken" @Ulterior:哪些声明? int age? getline's,仅以std::string 为目标? cin 的?真的没有理由 -1。 【参考方案1】:

由于您尚未发布任何代码。我来猜一猜。

getlinecin 一起使用时的一个常见问题是getline 不会忽略前导空白字符。

如果在 cin &gt;&gt; 之后使用 getline,getline() 会将此换行符视为前导空格,并且它会停止继续读取。

如何解决?

在拨打getline()之前先拨打cin.ignore()

或者

进行虚拟调用 getline() 以使用来自 cin &gt;&gt; 的尾随换行符

【讨论】:

+1 用于心理调试。 ignore 的问题在于您不知道需要忽略多少。最好只使用getline 一次只读取一行输入。 或者怎么样: if (getline(cin >> ws, s2)) getline(cin, s2); 【参考方案2】:

问题是您将getlinecin &gt;&gt; 输入混合在一起。

当您执行cin &gt;&gt; age; 时,它会从输入流中获取年龄,但会在流中留下空白。具体来说,它将在输入流上留下一个换行符,然后在下一个getline 调用中读取为空行。

解决方案是只使用getline 获取输入,然后解析该行以获得您需要的信息。

或者要修复您的代码,您可以执行以下操作,例如。 (您仍然需要自己添加错误检查代码):

cout << "Enter the full name of student: ";  // cin name
getline( cin , fullName );

cout << "\nAge: ";  // cin age
int age;

    std::string line;
    getline(cin, line);
    std::istringstream ss(line);
    ss >> age;


cout << "\nFather's Name: ";  // cin father name
getline( cin , fatherName );

cout << "\nPermanent Address: ";  // cin permanent address
getline( cin , permanentAddress );

【讨论】:

【参考方案3】:

cin &gt;&gt; age ; 行之后,输入缓冲区中仍有换行符\n(因为您按下回车键输入值),要解决此问题,您在读取int 后添加一行cin.ignore();

【讨论】:

以上是关于getline 无法正常工作?可能是啥原因? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

IE中无法运行javascript脚本是啥原因啊?

打开excel后出现“很抱歉,您的office安装无法正常工作”的提示是啥原因?

尝试多个选项后,我的 google 地方 SDK 似乎无法正常工作。可能是啥问题?

多个复选标记附件在 iOS7 中无法正常工作

电脑无法进入BIOS是啥原因?

湿度传感器坏掉有可能是啥原因?