我需要找到一个五位数的数字的总和。例如,数字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
由于某种原因,它没有显示出正确的答案,而且我似乎找不到错误的地方。
答案 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
。 ;)
吸取的教训可能是:免费检查错误和记录日志。