繁体   English   中英

数字的总和 (c)

[英]digits sum of a number (c)

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

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

你的代码的问题是

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

这适用于许多数字;

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

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

一条通用规则适用:如果您觉得某个函数未能完成它应该做的事情:查看其文档以了解它是否会返回任何完成/错误状态。 此处:查询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 s。 ;)

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

***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;  
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM