为什么不能getline()? 是否因为缓冲区中留有字符串?我还采取行动删除有疑问的缓冲区。但是这是不可能的。你知道为什么吗?
int len;
cout << "input length : ";
cin >> len;
int* intPass = new int[len];
int* intSolu = new int[len];
string strPass;
getline(cin, strPass);
cout << strPass;
cout << "intPass output : ";
for (int i = 0; i < len; i++) {
cin >> intPass[i];
}
答案 0 :(得分:0)
为什么不能上线?
输入 input length 的值时,输入数字和换行符,该换行符通过 getline
获得如果您输入了实例 123 aze qsd ,则 strPass 将为“ aze qsd”
所以你得到了一行,但没有得到预期的
如果您要在同一行中的号码之后全部刷新,则可以将 getline 通话加倍
例如,还修改您的代码以查看更多内容:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int len;
cout << "input length : ";
cin >> len;
int* intPass = new int[len];
int* intSolu = new int[len];
string strPass;
getline(cin, strPass);
getline(cin, strPass);
cout << "strPass is " << strPass << endl;
cout << "intPass input :" << endl; // it is an input, not an output
for (int i = 0; i < len; i++) {
cin >> intPass[i];
}
cout << "intPass output is" << endl;
for (int i = 0; i < len; i++) {
cout << intPass[i] << endl;
return 0;
}
编译和执行:
pi@raspberrypi:~ $ g++ -pedantic -Wall -Wextra c.cc
c.cc: In function ‘int main()’:
c.cc:13:8: warning: unused variable ‘intSolu’ [-Wunused-variable]
int* intSolu = new int[len];
^~~~~~~
pi@raspberrypi:~ $ ./a.out
input length : 3
aze qsd
strPass is aze qsd
intPass input :
11
22
33
intPass output is
11
22
33
pi@raspberrypi:~ $
我建议您检查cin >> len
是否成功,如果是,则检查 len 的值,例如:
if (!(cin >> len) || (len < 0)) {
cout << "invalid length" << endl;
return -1.
}