Входные пробелы, разделенные числами в массивах с использованием getline в cpp

я работал над проблемой, в которой я должен принять разделенные пробелами входы (<= 10) за которым следует другой набор разделенных пробелами входов в следующей строке в двух отдельных массивах в CPP. Я использую для этого функцию getline в cpp. Проблема, с которой я сталкиваюсь, — последняя строка ввода входных данных. Я не могу понять, с какой проблемой я сталкиваюсь. Когда появляется последняя строка, вывод останавливается и ждет, пока я напишу что-то, после чего он выдаст вывод. Вот мой код ..

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 inputgetline(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;}

`

1

Решение

Ваш код сбивает с толку, и не похоже, что он должен работать. Вы используете блокировку ввода с помощью cin / scanf, поэтому обычно он ждет вас, если на стандартном входе нет готовых входных данных.

Вот как выглядит то, что вы пытались сделать:

  • Читайте в строке в строку с именем a с помощью getline,
  • Читать данные из a в ваш массив с помощью scanf,

Тем не мение, 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);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]