/**
输入一串数字,输出它的总和;
如果是java的话使用容器来存储就好办了,这里试着用动态一维数组来存储试试
*/
#include<stdio.h>
#include<stdlib.h>//动态空间处理头文件?对的
int isNumber(char);
int isAdd(char);
void add(int*);
int main()
{
int again=0;
char enter;
do
{
printf("输入加法式:(例子:1+2+3+...(按回车结束)):\n");
int sum1=0;
int *sum=&sum1;
add(sum);
printf("sum=%d\n",*sum);
free(sum);//释放空间
printf("继续[1/0]?:");
scanf("%d%c",&again,&enter);//回车符无效
}while(again==1);
return 0;
}
int isNumber(char c)
{
return (c>='0'&&c<='9');
}
int isAdd(char c)
{
return (c=='+');//如果是加号的话
}
void add(int *sum1)//对输入的1+2+3+4+5.....进行求和,输入数字,和加号,输入其他字符结束
{
char ch;//
ch=getchar();//读入数字
if(isNumber(ch))//如果是个数字
{
*sum1=*sum1+((int)ch-48);//强制类型转换成int类型,并且累加
ch=getchar();//再次读入一个字符:‘+’
if(isAdd(ch))//如果是加号
{
//让加号无效
ch=0;//这样下次递归时,条件可以成立
add(sum1);//再加
}
//如果是其他字符就直接退出本次递归
}
}
测试:
输入加法式:(例子:1+2+3+...(按回车结束)):
1+2+3+4
sum=10
继续[1/0]?:1
输入加法式:(例子:1+2+3+...(按回车结束)):
12+23
sum=1
继续[1/0]?:
可以看到这里有问题了,只能进行一位数的累加,这样是没什么用的。下次来更新