сумма цифр числа (с) - PullRequest
       3

сумма цифр числа (с)

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

Мне нужно найти сумму цифр числа с пятью цифрами.Например, сумма цифр числа 3709 равна 3 + 7 + 0 + 9 = 19.

#include <stdio.h>

int main()
{
    int sum;
    char digit_1, digit_2, digit_3, digit_4, digit_5;
    printf("Plase enter a five digit number\n");
    scanf("%c,%c,%c,%c,%c", &digit_1, &digit_2, &digit_3, &digit_4, &digit_5);
    sum = digit_1 + digit_2 + digit_3 + digit_4 + digit_5;
    printf("the sum of the digits is: %d", sum);

    return 0;
}

output:

plase enter a five digit number                                       
3709                                                                  
the sum of the digits is 51

По какой-то причине не отображается правильный ответи я не могу найти, что не так.

Ответы [ 3 ]

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

Проблема с вашим кодом:

ваши scanf нужны , отдельные входы

scanf("%c,%c,%c,%c,%c", ...)

Следовательно, когда вы введете 3709, только digit1 будет прочитано, а остальные будутопущено scanf.Вы можете проверить возвращаемое значение scanf для проверки.

и значение ASCII 3 равно 51, таким образом, вы получаете 51 в качестве вывода.


Попробуйтеэто

scanf("%c%c%c%c", &digit_1 ,&digit_2 ,&digit_3 ,&digit_4 );

int sum = (digit_1 -'0')+(digit_2 -'0')+(digit_3 -'0')+(digit_4 -'0');
0 голосов
/ 19 октября 2018

[ Умышленно не полный ответ, а способ получить длинный комментарий ]

Применяется общее правило: если вы чувствуете, что функция не в состоянии делать то, что должна:посмотрите на его документацию, чтобы узнать, вернет ли он какое-либо состояние завершения / ошибки.Здесь: обратитесь к значению, которое scanf() функция возвращает .

Дословно из scanf() s документов :

Функция scanf возвращает значение макроса EOF, если ошибка ввода произошла до завершения первого преобразования (если оно есть).В противном случае функция scanf возвращает количество назначенных элементов ввода, которое может быть меньше предусмотренного или даже равно нулю в случае неудачного раннего сопоставления.

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

Таким образом, ваш код может выглядеть следующим образом:

/* main.c */

#include <stdlib.h> /* for EXIT_* macros */
#include <stdio.h>

int main(void)
{
    int sum;
    char digit_1, digit_2, digit_3, digit_4, digit_5;
    printf("Please enter a five digit number\n");
    int result = scanf("%c,%c,%c,%c,%c", &digit_1, &digit_2, &digit_3, &digit_4, &digit_5);

    if (EOF == result)
    {
      if (ferror(stdin))
      {
        perror("scanf() failed");
        exit(EXIT_FAILURE);
      }

      result = 0;
    }

    if (5 > result)
    {
      fprintf(stderr, "To few input: Should be %d, but is %d\n", 5, result);
      exit(EXIT_FAILURE);
    }

#ifdef DEBUG
    printf("printing as char: %c, %c, %c, %c, %c\n", digit_1, digit_2, digit_3, digit_4, digit_5);
    printf("printing as int: %d, %d, %d, %d, %d\n", digit_1, digit_2, digit_3, digit_4, digit_5);
#endif

    sum = digit_1 + digit_2 + digit_3 + digit_4 + digit_5;
    printf("the sum of the digits is: %d", sum);

    return EXIT_SUCCESS;
}

Скомпилируйте это с (большинством) всеми предупреждениями:

gcc -Wall -Wextra -pedantic -DDEBUG main.c -g -o main

Чтобы исправить последнюю ошибку, я оставляю вам.Если все готово, просто удалите -DDEBUG из опций компиляции, что исключает (надеюсь) просветляющие printf с.;)

Извлеченный урок может быть следующим: проверка на наличие ошибок и ведение журнала - это отладка бесплатно.

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

Это работает для многих цифр;

#include<stdio.h>
int main()
{
    int n,digit,sum=0;  
    printf("Please gine a positive integer");
    scanf("%d",&n);
    while (n>0)
    {
        digit=n%10;
        sum=sum+digit;
        n=n/10;     
    }
    printf("%d",sum);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...