m0_58203183 2022-06-05 19:31 采纳率: 85.7%
浏览 31
已结题

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

  • 写回答

1条回答 默认 最新

  • a5156520 2022-06-05 20:29
    关注

    应该是访问字符数组的下标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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 修改了问题 6月5日
  • 创建了问题 6月5日

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法