这C哪里有错

来源:百度知道 编辑:UC知道 时间:2024/05/17 03:43:59
题目是输入一个字符串,内有数字和非数字字符,如a123x456将其中连续的数字作为一个整数,依次存到一数组中。列如,123放在a[0],456放在a[1]并输出这些数
#include<stdio.h>
#include<math.h>
int n;
void main()
{
void lianjie(char *p1,char *p2,int n);
char a[100],*p1,*p2;
int i;
gets(a);
for(i=0;i<=100&&a[i]!='\0';i++)
{n=i;
}
p1=a;
p2=a;
lianjie(p1,p2,n);
}
void lianjie(char *p1,char *p2,int n)
{
unsigned long int b[10];int i,j,k=0,l=0,m=0,x;
for(i=0;i<n;i++)
{if(*(p2+i)>='0'&&*(p2+i)<='9')
{p1=p2+i;
l++;
}
else
{if(l!=0)
{
for(j=0;j<=l-1;j++,l--)
{k=k+(int)*(p1-l+1)*pow(10,l-1);
}
b[m]=k;
x=++m;
k=0;
l=0;
}
}
}
for(m=0;m<x;m++)
{printf("%6d",b[m]);
}
printf("\n");
}
谁能帮我看看哪有错吗
谢谢xndcn大致是对了但是为什么最后的数字不输出呢 比如我输入abc123de

最后的456不输出只输出123???
怎么可能?我用gcc,tc2分别实验均通过啊?
你用什么编译器?是把我的复制粘贴下来的吗?

改好咯:
修改过之前的都写在注释里,自己对照着看看

#include<stdio.h>
#include<math.h>
int n;
void main()
{
void lianjie(char *p1,char *p2,int n);
char a[100],*p1,*p2;
int i;
gets(a);
for(i=0;i<=100&&a[i]!='\0';i++)
{
n=i;
}
p1=a;
p2=a;
lianjie(p1,p2,n+1);/*lianjie(p1,p2,n);*/
}
void lianjie(char *p1,char *p2,int n)
{
unsigned long int b[10];
int i,j,k=0,l=0,m=0,x,temp;
for(i=0;i<=n;i++) /*for(i=0;i<n;i++)如果不加=,那么最后的那几个结尾的数字不会放进数组b中*/
{
if(*(p2+i)>='0'&&*(p2+i)<='9')
{
p1=p2+i;
l++;
}
else
{
if(l!=0)
{
temp=l;
for(j=0;j<temp;j++,l--)/*for(j=0;j<=l-1;j++,l--),不先把l的值存起来,j<=l-1,随l--循环次数减少*/
{