程序改错方面的一个例题

输入一个字符串,内有数字和非数字字符,例如:A123cdf 456.78cpc876.9er 840,
将其中连续的数字作为一个整数,依次存放到一数组a中。例如123存放在a[0],依次类推,统计共有多少个数,并输出这些数。
#include "stdio.h"
#define N 50
int atoi(char *p,int a)
{
int number,n;
while(*p!='\0')
{
for(;(*p>='0'&&*p<='9');p++)
number=0;
for(number=0;(*p>='0'&&p<='9');p++)
number=number
10+*p-'0';
a[p++]=number;
}
return n;
}
int main(void)
{
char s[N];
int i,k,a[N];
printf("Input a string:\n");
gets(s);
k=atoi(s,a);
printf("\nk= %d\n",k);
for(i=0;i<k-1;i++)
printf("%d ",a[i]);
return 0;
}
虽然可以运行,但是答案错误,希望大家能帮帮我

统计个数的 n初始化为0 每有一个数字n++没写

我把大部分改写了,代码如下,仅供参考,谢谢!

img

img

//输入一个字符串,内有数字和非数字字符,
//例如:A123cdf 456.78cpc876.9er 840,
//将其中连续的数字作为一个整数,依次存放到一数组a中。例如123存放在a[0],依次类推,统计共有多少个数,并输出这些数。

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define N 50
int myatoi(char *p,int *a)
{
    int n=0;
    //个数统计
    
    int i=0,j=0;
    //数组索引位置
    char num[N][N];
    
    
    while(*p!='\0')
    {
        if(*p>='0'&& *p<='9')
        {
            num[i][j++]=*p;
            if(!isdigit(*(p+1)))
            {
                num[i][j++]='\0';
                i++;
                j=0;
                n++;
            }
        }
        p++;
    }
    
    for(int k=0,z=0;k<n;k++,z++)
    {
        //printf("%s\n",num[k]);
        *(a+z)=atoi(num[k]);
    }
    
    return n;
}

int main(void)
{
    char s[N];
    int i,k,a[N];
    printf("Input a string:\n");
    fgets(s,N,stdin);
    
    k=myatoi(s,a);
    printf("\nk= %d\n",k);
    //输出目标数据
    for(i=0;i<k;i++)
        printf("%d ",a[i]);
    return 0;
}