isspace/isspace函数 若判断字符ch为空空格、制表符或换行符,函数返回非零值,否则返回零值,为什么这里遇到加减号返回0

#include<stdio.h>
#include <ctype.h>

void main()
{
int atoi(char *p);

char ch[20];
printf("please enter one sentence :\n");
gets(ch);

atoi(ch);
printf("整形为:%d",atoi(ch));

printf("\n");

}

#if(1)
int atoi(char p)
{
int i,n=0,sign=1;
if(p==NULL)
{
return 0;
}
for(i=0;isspace(p[i]);i++)//isspace函数 若判断字符ch为空空格、制表符或换行符,函数返回非零值,否则返回零值。
{
sign=(p[i]=='-')?-1:1;
if(p[i]=='+'||p[i]=='-')
{
i++;
}
}
for(n=0;isdigit(p[i]);i++)//C 库函数 int isdigit(int c) 检查所传的字符是否是十进制数字字符。
{
n=n
10+(p[i]-'0');
}
return sign*n;
}
#endif

img

img

应该是访问字符数组的下标n和要存储字符串中数字的n两个变量重合了,然后一些其他细节的问题,修改如下:


#include<stdio.h>
#include <ctype.h>

int main()
{
    int atoi(char *p);
    
    char ch[20];
    printf("please enter one sentence :\n");
    gets(ch);
     
    atoi(ch);
    printf("整形为:%d",atoi(ch));
     
    printf("\n");
}

#if(1)
int atoi(char *p)
{
    int i,n=0,sign=1;
    if(p==NULL)
    {
        return 0;
    }
    
    //过滤空格及确定正负 
    for(i=0;isspace(p[i]);i++)//isspace函数 若判断字符ch为空空格、制表符或换行符,函数返回非零值,否则返回零值。
    {
        sign=(p[i]=='-')?-1:1;
        if(p[i]=='+'||p[i]=='-')
        {
            continue;
        }
    }
    
    int k;
    //读取字符串中的数字字符并拼接成数字n,用k代替n来访问字符数组 
    for(k=i;p[k]!='\0';k++)//C 库函数 int isdigit(int c) 检查所传的字符是否是十进制数字字符。
    {
        if(isdigit(p[k])){ //如果是数字则累加进数字n 
            n=n*10+(p[k]-'0');
        }
    }
    
    return sign*n;  //把正负加到结果上 
}
#endif

img

img