![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/d53f8794a4c27d1e915a8d8417d5ad6eddc43875?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define nsize 10 //输入的10进制数字初始长度(包含结束符号),及内存增长幅度
char *getNum();//通过输入获取一个任意长正数字
long sum(char *num);
int main()
{
char *num=NULL;
while(1)
{
num=getNum();
printf("各位的数字和为:%ld\n",sum(num));
}
return 0;
}
long sum(char *num)
{
long i,len=strlen(num),sum=0;
for(i=0;i<len;i++)
{
sum=sum+num[i]-'0';
}
return sum;
}
char *getNum()
{
char c,*n10=NULL,*n10Save=NULL;
int size=nsize,count=0,flag=0;
n10=(char *)malloc(sizeof(char)*size);
printf("输入一个任意位数的正整数,回车确认:\n");
while(1)
{
scanf("%c",&c);
if(c=='-' && flag==0)//首位不能是负号
{
flag=1;
printf("必须输入正整数\n");
fflush(stdin);// 清空剩余缓存
continue;
}
if(c>='0' && c<='9')
if(count<=size-2)
{
n10[count++]=c;
n10[count]=0;
}
else
{
size=size+nsize;
n10Save=(char *)malloc(sizeof(char)*size);
n10Save[0]=0;
strcpy(n10Save,n10);
free(n10);
n10=n10Save;
n10[count++]=c;
n10[count]=0;
}
else if(c=='\n')
break;
else
{
printf("输入错误:只能输入数字!!请重新输入\n");
count=0;
n10Save=NULL;
free(n10);
size=nsize;
n10=(char *)malloc(sizeof(char)*size);
fflush(stdin);// 清空剩余缓存
}
}
return n10;
}