c语言程序需要帮忙调试 详细点开看?

#include<stdio.h>#include<string.h>#include<math.h>main(){chara[500],b[500];intd[100]... #include<stdio.h>
#include<string.h>
#include<math.h>
main()
{ char a[500],b[500];
int d[100]={0};
int s,i,j,n,m,p=0,v,h,c;
gets(a);
s=strlen(a);
for(i=0;i<s;i++)
{ if(a[i]>='0' && a[i]<='9')
{ b[v]=a[i];
v++;
for(j=i+1;j<s-i;j++)
{if(a[j]>='0' && a[j]<='9')
{b[v]=a[j];
v++;
}
else
{v++;
break;
}
}
b[v]=0;
n=0;m=0;
c=strlen(b);
for(v=0;v<c;v++)
{m+=(b[v]-'0')*pow(10,c-n);
n++;
}
for(v=0;v<c;v++)
b[v]={0};
d[p]=m;
p++;
}
}
for(p=0;p<100;p++)
h+=d[p];
printf("%d",h);
} 题目是编写程序实现从一字符串str中取出连续的数字作为一个正整数,计算所有这些正整数之和。
展开
 我来答
百度网友c1994c5f8
2019-12-08 · TA获得超过1332个赞
知道小有建树答主
回答量:264
采纳率:89%
帮助的人:202万
展开全部

原来的代码用了太多变量弄得稍复杂,简化一下,不知是否符合要求:

#include<stdio.h>

void main()

{

    char a[500];

    char* s;

    int d[100] = { 0 };

    int i = 0, sum = 0;

    gets(a);

    s = a; //指针指向字符串起始位置

    while (*s) //当*s不为0,即字符串未结束

    {

        while (((*s) < '0') || ((*s) > '9')) //跳过所有非数字

        {

            if (*s) //如果没碰到字符串结束符0,向后移动指针s

                s++;

            else

                break; //碰到字符串结束符0,则结束循环

        }

        while (((*s) >= '0') && ((*s) <= '9')) //当碰到数字,则存储到d[i]中,连续数字则不断d[i]*10累加

        {

            d[i] = d[i] * 10 + (*s)-'0';

            s++; //每处理完1位数字,指针后移1位

        }

        i++; //每处理完1组连续数字,d数组索引加1,准备存储下一组数字

    }

    for (i = 0; i < 100; i++)

        sum += d[i];

    printf("%d", sum);

}

zhiyyao
2019-12-08 · TA获得超过1910个赞
知道小有建树答主
回答量:645
采纳率:57%
帮助的人:396万
展开全部
#include<stdio.h>
#include<string.h>
#include<math.h>
main()
{
char a[500],b[500];
int d[100]={0};
int s,i,j,n,m,p=0,v=0,h=0,c;//v,h初始化为0
gets(a);
s=strlen(a);
for(i=0;i<s;i++)
{
if(a[i]>='0' && a[i]<='9')
{
b[v]=a[i];
v++;
for(j=i+1;j<s;j++)
{
if(a[j]>='0' && a[j]<='9')
{
b[v]=a[j];
v++;
}
else
{
// v++;
break;
}
}
i = j;//从j+1处开始继续
b[v]=0;
n=0;m=0;
c=strlen(b);
for(v=0;v<c;v++)
{
m+=((b[v]-'0')*(int)pow(10,c-n-1));//减1
n++;
}
for(v=0;v<c;v++)
b[v]=0;
d[p]=m;
p++;
v = 0;//重新初始化为0
}
}
for(p=0;p<100;p++)
h+=d[p];
printf("%d",h);
}
很简单的问题被你复杂化了,我可以用不到你一半的代码完成同样的任务,但为了不打乱你的思路,按你的程序改了一下就可以了,你很容易看明白,楼下的方法也很不错,你可以参考一下
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a3808c8
2019-12-08
知道答主
回答量:46
采纳率:33%
帮助的人:6.3万
展开全部
你程序中变量v的初始值设置为0;
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[500] = {0};
char arr[500] = {0};
int buf[100] = {0};
gets(str);
int i=0;
int j = 0;
int n = 0;
int sum = 0;
int q = 0;
while(str[i] != '\0')
{
if(str[i] >= '0' && str[i] <= '9')
{
n = i;
while(str[n] != '\0')
{
arr[j] = str[n];
printf("////\n");
if(str[n+1] > '9')
{
if(str[n+1] == '\0')
{
break;
}
i = n;
break;
}
n++;
j++;
}
printf("%s ",arr);
printf("\n");
buf[q] = atoi(arr);
q++;
memset(arr,0,500);
j = 0;
i = n;
}
i= i+1;;
}
for(i = 0;i<q;i++)
{
printf("%d ",buf[i]);
}
for(i = 0;i<q;i++)
{
sum+= buf[i];
}
printf("\n");
printf("sum = %d\n",sum);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式