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

时间:2015-05-08 08:55:44

标签: c++ iostream

sample execution为什么尝试使用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次代表中苦苦挣扎!)

2 个答案:

答案 0 :(得分:3)

第一个cin后,

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

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

答案 1 :(得分:1)

cin.get()不从输入(documentation)中提取分隔符。

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

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

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

如果速度是一个问题,请尝试关闭CI / O同步:std::ios::sync_with_stdio(false);有一个有趣的基准here,表明如果您与CI / O同步,流实际上很漂亮快速。