gpt4 book ai didi

c++ - 在cpp中使用getline在数组中输入空格分隔的数字

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:12 24 4
gpt4 key购买 nike

我一直在研究一个问题,在这个问题中,我需要在 CPP 的两个单独数组的下一行中采用空格分隔的输入 (<=10),然后是另一组空格分隔的输入。我在 cpp 中使用 getline 函数为此。我面临的问题是接受输入的最后一行。我不知道我面临的是什么问题。当最后一行出现时,输出停止并等待我输入一些内容,然后它提供输出.这是我的代码..

while(test--)
{

int len[100];
int pos[100];


string a,b,code;
// int t=1;


cin>>code;


cin.ignore();//ignores the next cin and waits till a is not input


getline(cin,a);


// deque<char> code1;

// code1.assign(code.begin(),code.end());




int k=0;
int t=a.length();
for(int i=0;i<t/2+1;i++)//converts two n length arrays pos[] and len[]
{

scanf("%d",&len[i]);

while(a[k]==' ')
{
k++;

}




pos[i]=a[k]-48;
k++;
}



//int c;}

`

最佳答案

您的代码令人困惑,看起来不应该工作。您正在使用 cin/scanf 的阻塞输入,因此如果标准输入上没有准备好输入,它等待您是正常的。

这就是您尝试执行的操作:

  • 使用 getline 将行读入名为 a 的字符串。
  • 使用scanfa 中的数据读入您的数组。

但是,scanf 不是为此而设计的。 scanf 函数从键盘获取输入。我想你想用 sscanf从字符串 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);
}

关于c++ - 在cpp中使用getline在数组中输入空格分隔的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com