Есть ли ограничение на количество символов в строке, которые может сканировать getchar?

#c #stdio #getchar

#c #stdio #getchar

Вопрос:

У меня есть задание создать программу, которая вычисляет итеративную цифровую сумму целого числа, например. выполнение цифровой суммы до тех пор, пока результатом не станет одна цифра. Загвоздка в том, что число, на которое они проверяют, намного больше, чем может быть сохранено в любом типе int (около 10 ^ 40000), поэтому моей идеей было выполнить первую сумму с помощью getchar(), суммируя число цифра за цифрой. Мой код

 #include <stdio.h>

int main(){
    long int n=0;
    int c;

    //first sum
    while((c=getchar())!=EOF amp;amp; c!='n'){
        n =(c-'0');
    }

    //iterative summing
    long int s;
    do{
        s=0;
        while(n>0){
            s =n%10;
            n/=10;
        }
        n=s;
    }while (n>=10);

    printf("%ldn",s);
    return 0;
}
  

Это работало для относительно коротких чисел, однако после некоторого момента сумма получалась неправильной. Итак, я попытался настроить переменную, которая увеличивалась бы при суммировании каждого символа, и она всегда показывала бы число 4095.

Итак, мой вопрос в том, существует ли 11-разрядное ограничение на количество символов, которые вы можете получить из стандартного интерфейса с помощью getchar ()? Если да, есть ли способ получить больше?

Комментарии:

1. К самому вопросу — нет, ограничений нет. Но как вы вводите входные данные?

2. Я просто скопировал числа и вставил их в терминал.

3. Так что это ошибка вашего терминала. Лучше перенаправить из файла.

4. Вероятно, это ошибка режима cooked / canonical драйвера tty ядра, который должен устанавливать ограничение на длину строки, чтобы избежать необходимости неограниченного буферного пространства в ядре. Если бы tty находился в режиме без предварительной обработки, терминал, вероятно, не помешал бы вам вставить в него произвольное количество символов. Но да, OP должен использовать перенаправление здесь.

5. Бьюсь об заклад, что ваша копипаста остановилась на 4095 символах.