无法使用 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=],流实际上非常快。
#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=],流实际上非常快。