我的代码是
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
的工作原理,它接受剩余的换行符作为输入,并且缓冲区没有填充任何内容。
这是混合使用 getline
和 operator>>
进行输入时的常见问题。解决该特定问题的最佳解决方案是仅使用 operator >>
或仅使用 getline
- 还有各种其他解决方案,但通常很难找到正确的解决方案.
关于c++ - 为什么 cin 工作而 cin.getline 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20067065/