Чтение чисел с помощью getline

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

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,')');
    }
}

}


person GoBlue_MathMan    schedule 19.09.2013    source источник
comment
вам не хватает * в char ***&a, а также добавьте еще &, если вам нужен более качественный и чистый код.   -  person user1708860    schedule 20.09.2013


Ответы (1)


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

1,2,3
4,5,6

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

person paddy    schedule 19.09.2013
comment
мой ввод будет примерно таким: (1,23,92,H) - person GoBlue_MathMan; 20.09.2013
comment
Было бы намного безопаснее, если бы вы сделали обычный getline (разделенный новой строкой, предполагая, что ваш ввод именно такой), а затем проанализировали информацию из этой строки. Вы по-прежнему можете использовать getline, но делайте это на istringstream. Таким образом, у вас будет гораздо меньше возможностей для проблем. - person paddy; 20.09.2013