Поток ввода файла C ++: чтение "больших" целых чисел - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть следующий код:

void readFile(BST *tree) {
    ifstream infile("input.txt");
    long int sid, t;
    string l, f, h;
    while (infile >> sid >> l >> f >> h >> t) {
    // The line below is for debug purposes
    cout << "\"" << sid << "\" \"" << l << "\" \"" << f << "\" \"" << h << "\" \"" << t << "\"" << endl;
        tree->insert(sid, l, f, h, t);
    }
    infile.close();
}

Вот пример строки:

78832112 Bruno Nicholas 32_Sugar_Rd_PA_12345 3026821712

Интересно, что мой код ничего не читает из этой строки.Еще более интересным является то, что если я удаляю любую цифру из последнего числа, она просто отлично его читает.

Я понятия не имею, что вызывает такое поведение.Есть идеи?

Ответы [ 3 ]

1 голос
/ 08 декабря 2011

Вам нужно использовать 64-битное целое число для хранения чего-то такого большого.long int - 32 бита на большинстве платформ.В зависимости от вашего компилятора и платформы вы можете использовать long long, int64_t или все, что поддерживает ваш компилятор.

1 голос
/ 08 декабря 2011

Стоит отметить, что показания для sid, l, f и h заполняются по одному за раз, по порядку, и, таким образом, они на самом деле успешно выполняются, поскольку число в конце строка еще не прочитана, поэтому ваше утверждение «Интересно, что мой код ничего не читает из этой строки» неверно. Программа читает большую часть строки, но не может обработать последнее целое число, поэтому вся операция чтения вернула false, и вы никогда не попадете внутрь цикла, чтобы использовать только что прочитанные данные.

1 голос
/ 08 декабря 2011

Ну, число слишком велико для long вашей платформы ... вы можете использовать uint64_t или что-то в этом роде, чтобы дать вашей программе больше места, и / или вам нужно документ формат вашего файла и ограничение допустимых диапазонов значений, поддерживаемых вашим форматом.

Никогда не забывайте, что программирование - это только половина ввода-вывода.Другая половина - документация.Ввод / вывод - ничто без спецификации формата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...