【问题标题】:digits sum of a number (c)数字的总和 (c)
【发布时间】:2019-03-24 04:45:09
【问题描述】:

我需要找到一个五位数的数字之和。比如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

由于某种原因,它没有显示正确答案,我似乎找不到什么问题。

【问题讨论】:

  • 你的代码在哪里?
  • 将您的代码作为文本发布在问题中。
  • 你正在使用char 类型的数据而不是int
  • 作为一般规则,请避免在问题中张贴文字图片。如果可能,最好复制原始文本。
  • @suvojit_007 很好,问题是他添加的是 ascii 值而不是十进制。

标签: c sum


【解决方案1】:

这适用于许多数字;

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

【讨论】:

  • 当然!在发布版本中给出有趣的结果。 a 的数字总和是 27。
  • @Swordfish 我不明白你的意思。对不起。
  • @Swordfish nscanf 初始化,玩具程序无需检查scanf 的返回值。
  • @Jabberwocky "nscanf 初始化" 可能。也许不是。
  • @Jabberwocky:当“玩弄”以了解scanf() & Friends 的工作原理时,检查他们的结果非常有意义。
【解决方案2】:

你的代码有问题

您的 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');

【讨论】:

    【解决方案3】:

    [意图不是一个完整的答案,而是渴望评论的方式]

    适用一般规则:如果您觉得某个函数未能完成应有的工作:查看其文档以了解它是否会返回任何完成/错误状态。这里:查询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,这将排除(希望)启发printfs。 ;)

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

    【讨论】:

      【解决方案4】:
      ***Generalized program for any n digit integer!***
      #include<stdio.h>
      int main()
      {
        int num,digit=0,i,temp,sum=0,rem;
        printf("Enter the number:\n");
        scanf("%d",&num);
        temp=num;
        while(num!=0)
        {
          num=num/10;
          digit++;
          rem=temp%10;
          temp=temp/10;
          sum=sum+rem;
        }
        printf("It is a %d digit number.\n",digit);
        sum=abs(sum);
        printf("The sum of the digits is %d.\n",sum);
      return 0;  
      }
      

      【讨论】:

      • 与上面给出的答案相同
      猜你喜欢
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      相关资源
      最近更新 更多