c++ - 为什么 cin 工作而 cin.getline 不工作?

标签 c++ cin getline

我的代码是

char buffer[10]={0};
cin>>buffer; //here i enter the contents as "12345678912345"
//Now i tried to enter 14 characters into a buffer of 10
cin>>buffer; //This works as it waits for input on the console
cout<<buffer;

什么时候

char buffer[10]={0};
cin>>buffer;//same input as above "12345678912345"
cin.getline(buffer,10);//This doesn't wait for input on console and returns 
cout<<buffer;

为什么会这样?

谢谢: 感谢大家的回答,他们很有帮助

最佳答案

从第一行输入缓冲区溢出的意义上说,您的代码片段都没有“工作”。这根本不是什么好事。

第二种情况不等待输入,因为 operator>>getline 之间的技术差异 - 它们对您输入的换行符的 react 不同。当读取第一个cin >> buffer时,输入末尾的换行符留在输入流中(cin)。在第一种情况下,第二个 cin >> buffer 将跳过输入缓冲区中的换行符,然后等待更多输入。

在第二种情况下,由于 getline 的工作原理,它接受剩余的换行符作为输入,并且缓冲区没有填充任何内容。

这是混合使用 getlineoperator>> 进行输入时的常见问题。解决该特定问题的最佳解决方案是仅使用 operator >> 或仅使用 getline - 还有各种其他解决方案,但通常很难找到正确的解决方案.

关于c++ - 为什么 cin 工作而 cin.getline 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20067065/

相关文章:

c++ - cin 和 getline 跳过输入

c++ - 使用cin函数在c++中输入数学运算

c - size_t 在 C 中的 getline 中转换

c++ - getline 不接受任何输入

类中的c++动态结构

c++ - 获取 Qt 对象的大小

c++ - c++中的位集操作

c++ - cin.fail while循环输入再入

斯卡拉 : bug with getLines?

c++ - 如何在非对齐位置将 char 数组转换为 int?