无法使用 cin.get() 读取两个字符串

Unable to read two strings with cin.get()

为什么尝试使用 cin.get() 输入两个字符串会失败?我可以成功读取第一个字符串,但第二个字符串和后续操作的输入失败。请参阅代码:

#include <iostream>
#include <stdlib.h>

int main(){
long int n,k;
char a[11],b[11];
cin.get(a,11);

n = atoi(a);

cin.get(b,11);
cout<<b;   
k = atoi(b);


cout      << "\ncin.rdstate(): " << cin.rdstate()
      << "\n    cin.eof(): " << cin.eof()
      << "\n   cin.fail(): " << cin.fail()
      << "\n    cin.bad(): " << cin.bad()
      << "\n   cin.good(): " << cin.good() << endl << endl;
}

我正在尝试输入两个字符串并将它们存储到程序中所示的 long int 变量中,但是 cin.get(b,11) 失败并且发生堆栈溢出 k= atoi(b) 。此外,您可能会观察到 cout<<b 没有任何输出。而且,最后 cin.fail() 设置为 1 ,这意味着我在做某种逻辑错误。请帮忙我在纠正这个! 请建议一些快速且仅适用于 C++ 的方法.. (如果你觉得这个问题太糟糕了,请在投反对票之前在评论中提及,我已经在 21 个代表处苦苦挣扎了!)

\n 将保留在第一个 cin 之后的缓冲区中。您可以通过添加空 cin.get()

来解决此问题
cin.get(a,11);
n = atoi(a);
cin.get();
cin.get(b,11);
cout<<b;   
k = atoi(b);

cin.get() 不从输入中提取定界符 (documentation)。

如果您使用的是带流的 C++,那么使用内置功能很有意义。特别是,C++ 提供了格式化的 I/O。要读取两个数字,您应该使用:

long int a, b;
cin >> a;
cin >> b;

这将从标准输入中读取两个数字。


如果速度是一个问题,请尝试关闭 C I/O 同步:std::ios::sync_with_stdio(false); 有一个有趣的基准测试 here 表明如果您关闭与 C [= 的同步24=],流实际上非常快。