Почему моя программа достигает конца файла при вводе больших чисел? - PullRequest
0 голосов
/ 17 октября 2018
int main()
{
    int sum = 0, value = 0;
    while (std::cin >> value)
        sum += value;
    std::cout << "Sum is: " << sum << std::endl;
    return 0;
}

Таким образом, этот код берет значения от пользователя и добавляет их.Я не понимаю, что делает его достигающим конца файла.Я протестировал его несколько раз и обнаружил, что когда я использую большие числа (9999999999), он заканчивается быстрее, но когда я вставляю только 1 с, он никогда не заканчивается.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Блейк.Проблема в том, что целые числа могут быть только такими большими.Диапазон для обычного int составляет от -32 767 до 32 767;диапазон от long int составляет от 2 147 483 647 до 2 147 483 647 и т. д. Я уверен, что в Интернете есть список, где вы можете найти различные диапазоны (я не запоминаю их на макушке).

В любом случае, я считаю, что ваша проблема в том, что ваш int sum становится слишком большим, и это нарушает вашу программу.Кроме того, я бы порекомендовал иметь способ выйти из цикла while, чтобы ваша программа не имела возможности продолжаться вечно;Вы могли бы сделать это с чем-то вроде: if(value == -1) break;

Приятного обучения!

0 голосов
/ 17 октября 2018

Вы испытываете целочисленное переполнение.

В частности, оператор bool для std::istream возвращает false, поскольку поток не смог прочитать большое значение в int.

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