有个程序有点错误,自己很难看出啊!

whc748227431whc 2011-12-19 03:05:36
写的程序主要是想解决统计负整数的和的问题。
现在写的程序还完整,就是有一些细节的问题没解决,希望大家解决下我问的问题,谢谢各位了
#include<stdio.h>
#include<math.h>
main()
{char a[80];
char ch; // 输入值
int i; //循环变量
int j=0;
int sum,y=0; //负整数总和
int ABC(char a[],int i,int j); //自己定义求负整数的函数

/*输入*/
while((ch=getchar())!='*')
{a[j]=ch;
j++;
}
/*求负整数总和*/
for(i=0;i<j;i++)
{if(a[i]=='-') sum=ABC(a,i,j);
y=sum+y;
}
printf("sum=%d\n",sum);
}
/*自定义函数求和*/
int ABC(char a[],int i,int j)
{int y=0; //返回值
int k,g=0; //循环变量
int h=0;
int flag;
int b[80];
/*自己检测传入的数据是不是正确*/
printf("i=%d,j=%d\n",i,j);
for(k=i;k<j;k++)
printf("a[%d]=%c\n",k,a[k]);

for(k=i+1;k<j;k++)
{if((a[k+1]>='0')&&(a[k+1]<='9'))
{b[h]=int(a[k+1])-45; //-45字符转化为整数
printf("h=%d,b[%d]=%d\n",h,h,b[h]);
h++;
printf("h=%d\n",h);
}
else {flag=0;break;};

printf("g=%d\n",g); //用来检测下循环了几次,结果发现只有一次,就出现问题了
g++;
};

for(k=h,g=0;k>=0;g++,k--)
y=y+b[g]*int(pow(10,k));
return (-y);
}
我的问题就是上面怎么会只循环一次啊,我输入了-30-40,怎么还是循环一次,
不懂我问题的在线等你,
如果有好的解决方法欢迎给出
...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
c090869 2011-12-20
  • 打赏
  • 举报
回复
还有加h--
c090869 2011-12-20
  • 打赏
  • 举报
回复
if(a[k+1]>='0'&&a[k+1]<='9')中的k+1应为k
还有 y=sum+y应在if内
printf("sum=%d\n",sum);应为printf("sum=%d\n",y);
应该减48
猪头小哥 2011-12-19
  • 打赏
  • 举报
回复
你试试看 你那个pow()函数用错了好像 我查了下里面的参数应该是float或者是double~~

#include<stdio.h>
#include<math.h>
int main()
{
char a[80];
char ch; // 输入值
int i; //循环变量
int j=0;
int sum,y=0; //负整数总和
int ABC(char a[],int i,int j); //自己定义求负整数的函数

/*输入*/
while((ch=getchar())!='*')
{
a[j]=ch;
j++;
}
/*求负整数总和*/
for(i=0;i<j;i++)
{
if(a[i]=='-') sum=ABC(a,i,j);
y=sum+y;
}
printf("sum=%d\n",sum);
return 0;
}
/*自定义函数求和*/
int ABC(char a[],int i,int j)
{
int y=0; //返回值
int k,g=0; //循环变量
int h=0;
int flag;
int b[80];
/*自己检测传入的数据是不是正确*/
printf("i=%d,j=%d\n",i,j);
for(k=i;k<j;k++)
printf("a[%d]=%c\n",k,a[k]);

for(k=i+1;k<j;k++)
{
if((a[k+1]>='0')&&(a[k+1]<='9'))
{
b[h]=int(a[k+1])-45; //-45字符转化为整数
printf("h=%d,b[%d]=%d\n",h,h,b[h]);
h++;
printf("h=%d\n",h);
}
else {flag=0;break;};

printf("g=%d\n",g); //用来检测下循环了几次,结果发现只有一次,就出现问题了
g++;
}

for(k=h,g=0;k>=0;g++,k--)
y=y + b[g] * (int)pow(10.0,k);
return (-y);
}

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧