数字的总和(c)

时间:2018-10-19 09:46:40

标签: c sum

我需要找到一个五位数的数字的总和。例如,数字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;
}

输出:

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

由于某种原因,它没有显示出正确的答案,而且我似乎找不到错误的地方。

3 个答案:

答案 0 :(得分:1)

您的代码存在问题

您的scanf需要,分开的输入

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

因此,当您输入3709时,将仅读取digit1,其余部分将被scanf忽略。您可以检查scanf的返回值进行验证。

并且3的ASCII值为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');

答案 1 :(得分:0)

这适用于许多数字;

#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);
}

答案 2 :(得分:0)

[不是故意的完整答案,而是想发表评论的方式]

一个通用规则适用:万一您觉得某个函数无法完成应做的事情:查看其文档以了解它是否会返回任何完成/错误状态。此处:查询scanf()函数 返回 的值。

scanf()s docs的逐字记录:

  

如果在第一次转换(如果有)完成之前发生输入失败,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。 ;)

吸取的教训可能是:免费检查错误和记录日志。