您的代码令人困惑,看起来它不应该工作。您正在使用 cin/scanf 的阻塞输入,因此如果标准输入上没有准备好输入,它等待您是正常的。
这就是您尝试做的事情:
- 将该行读入一个名为
a
using的字符串getline
。
a
使用 将数据从数组中读取scanf
。
然而,scanf
并不是为此而生的。该scanf
函数从键盘获取输入。我认为您想使用sscanf从 string 输入值a
。
但更好的是使用stringstreams。
起初我以为你试图从命令行读取输入的长度,所以我建议这样做:
size_t arr_len;
cin >> arr_len;
if (cin.fail())
{
cerr << "Input error getting length" << endl;
exit(1);
}
int* len = new int[arr_len];
int* pos = new int[arr_len];
for (int count = 0; count < arr_len; count++)
{
cin >> len[count];
if (cin.fail())
{
cerr << "Input error on value number " << count << " of len" << endl;
exit(1);
}
}
for (int count = 0; count < arr_len; count++)
{
cin >> pos[count];
if (cin.fail())
{
cerr << "Input error on value number " << count << " of pos" << endl;
exit(1);
}
}
delete [] pos;
delete [] len;
然后我更仔细地看了看。看起来这就是你想要做的。我正在使用std::vector
而不是int[]
,但如果你真的想要,改变它并不难。
string line;
getline(cin, line);
if (cin.fail())
{
cout << "Failure reading first line" << endl;
exit(1);
}
istringstream iss;
iss.str(line);
vector<int> len;
size_t elements = 0;
while (!iss.eof())
{
int num;
iss >> num;
elements++;
if (iss.fail())
{
cerr << "Error reading element number " << elements << " in len array" << endl;
}
len.push_back(num);
}
getline(cin, line);
if (cin.fail())
{
cout << "Failure reading second line" << endl;
exit(1);
}
iss.clear();
iss.str(line);
vector<int> pos;
elements = 0;
while (!iss.eof())
{
int num;
iss >> num;
elements++;
if (iss.fail())
{
cerr << "Error reading element number " << elements << " in pos array" << endl;
}
pos.push_back(num);
}