Переполнение буфера суммы цифр - PullRequest
0 голосов
/ 03 марта 2020

Я новичок в программировании в C, и я ищу решение для конкретной c проблемы. Я должен создать программу для суммирования цифр. То, что я сделал, не идеально, но код работает до тех пор, пока строка не станет слишком длинной, как 10000 цифр в stdin, и я застряну с этим. Я не могу поставить все эти числа, потому что я получаю переполнение. Думаю, мне следует создать какой-то буфер, но я не знаю, как это сделать с помощью stdin. Спасибо за любые идеи. (Извините за мой английский sh, он не идеален)

#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>

int main()  {


long a; 
long value;
long c;

char s[10000];

printf("Input an integer\n");
scanf("%s", s);

value = a = 0; 

while (s[a] != '\0') {
c   = s[a] - '0'; 
value = value + c;
a++; }


          if(value < 10){
          printf("Sum of digits %ld\n", value);} 


                             while(value >= 10){
                             long  digit = 0;
                             long  value2 = 0;

                             while (value > 0)
                             {
                             digit = value % 10;
                             value2  = value2 + digit;
                             value /= 10;}

 printf("Sum of digits %ld \n",value2);  }

 return 0; 
 }

1 Ответ

0 голосов
/ 04 марта 2020

Вам не нужен буфер, потому что вы можете вычислить сумму на лету:

#include <stdlib.h>  // EXIT_FAILURE
#include <stdio.h>
#include <ctype.h>   // isdigit()

int main()
{
    puts("Input an integer:");

    long long unsigned sum = 0;
    for (int ch = fgetc(stdin); ch != EOF && ch != '\n'; ch = fgetc(stdin)) {
        if (isdigit(ch)) {
            sum += (ch - '0');
        }
        else {
            fprintf(stderr, "'%c' is not a valid digit :(\n\n", ch);
            return EXIT_FAILURE;
        }
    }

    printf("Sum of digits: %llu\n\n", sum);
}
...