C语言字符串,数组相关问题

 # 题目:要求将字符串中的每一段数提取出来存到数组a中,然后将a数组输出

 

#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
    char string[99];    
    scanf("%s", string);
    char* p = string;
    int i = 0;
    int n = 0;
    int m = 0;
    char a[99] ;

    while (p[i] != '\0')
    {
        if ((int)p[i] >= 0) {
            if ((int)p[i] <= 9) {
                n = 10 * n + ((int)p[i]);
            }
        }
        else {
            a[m] = n;
            m++;
            n = 0;
        }
        i++;
    }
    int k = 0;
    while (k<=m)
    {
        printf("%d  ",(int)a[k]);
        k++;
    }
    printf("\n%d", k);
    printf("\n%d", i);
    return 0;
}

 #
 a4d5d8
-52
1
6

#问题出现在了这一段
while (p[i] != '\0')
{
if ((int)p[i] >= 0) {
if ((int)p[i] <= 9) {
n = 10 * n + ((int)p[i]);
}
}
那个n不知道怎么回事在p【i】符合上面的条件时,不能进行 n = 10 * n + ((int)p[i]); 这一步,这是怎么回事呢,调试就是在那直接把这一句略过了

首先你要说明你的最终目的啊,这样别人分析你代码也就没那么累啊
怎么分配是按数字作为分界点么?
比如a3 h3 d566
把他们输出成
a3
h3
d566
这样么?

不要这样写,不就是个字符嘛,直接比较就好

    while (p[i] != '\0')
    {
        if (p[i] >= '0' && p[i] <= '9') {
            n = n * 10 + p[i] - '0';
        } else {
            a[m++] = n;
            n = 0;
        }
         i++;