[英]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.