2013-09-19 4 views
0

У меня есть строка, которая имеет формат (int, int, int, char) и хочет сохранить три ints в x, y, z, а затем поместить значение char в эту позицию в моем 3D массив. Однако он пропускает первое число и переходит ко второму. Любая помощь?Чтение чисел с getline

void list_Input(char ***&a, const int &f, const int &n) 
{ 
string line; 

while (getline(cin, line, ',') && !line.empty()) 
{ 
    if (line[0] == '/') 
    { 
     continue; 
    } 
    else 
    { 
     int y = stoi(line); 
     getline(cin, line, ','); 
     cout << line; 
     int x = stoi(line); 
     getline(cin,line,','); 
     int f = stoi(line); 

     a[z][x][y] = getline(cin,line,')'); 
    } 
} 

}

+0

Вам не хватает '*' в 'char *** & a', также добавьте еще один' & ', если вам нужен лучший и чистый код. – user1708860

ответ

0

Трудно сказать, не видя ваш вход, но я думаю, что здесь происходит это вы используете ',' в качестве разделителя каждый раз. То, что вы найдете то, что это сломается, если ваши номера выглядят следующим образом:

1,2,3 
4,5,6 

Обратите внимание, когда вы читаете третий номер, нет запятой после него. Таким образом, поток будет считан, пока не найдет запятую. То есть после первого номера на следующей строке. В этот момент вы не синхронизированы и пропустите первый номер.

+0

мой вход был бы примерно следующим: (1,23,92, H) –

+0

Было бы намного безопаснее, если бы вы сделали обычную 'getline' (разделили на новую строку, считая, что ваш вход такой), а затем проанализируйте информация из этой строки. Вы все равно можете использовать 'getline', но делайте это на' istringstream'. У вас будет меньше возможностей для решения проблем. – paddy

Смежные вопросы