为什么尝试使用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次代表中苦苦挣扎!)
答案 0 :(得分:3)
\ 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同步,流实际上很漂亮快速。