错误代码

#include<stdio.h>
#define N 100
int main(void)
{
    char str[N];
    scanf("%s",str);
    int max=0;
    for(int i=0;i<strlen(str);i++)
    {int a=0;//问题1 这就清零?上一次的数值  不要了?
     if(str[i]>=1&&str[i]<=9)//问题2 是和字符串做对比'0''9'
     {
       a=a*10+str[i];//str[i] 输出的是ASSCI值
     }
     if(max<=a)
     {
         max=a;
     }
    }
    printf("%d",max);
}

正确代码

#include<stdio.h>
#define N 100
int main(void)
{
    char str[N];
    scanf("%s",str);
    int max=0;
    int a=0;
   
    for(int i=0;i<strlen(str);i++)
    {
     if(str[i]>='0'&&str[i]<='9')//问题3解决
     {
       a=a*10+(str[i]-'0');//问题2解决
      
     }
     else a=0;//问题1解决
     if(max<=a) max=a;
    }
    printf("%d",max);
    /*char str[]="asd123";
    printf("%d",str[4]-'0');*/
    system("PAUSE");
    return 0;
}

运行结果如下
在这里插入图片描述

注意atoi()函数参数不能是字符

1)该函数不可以 对字符串数组存储的单元字符操作

#include<stdio.h>
#define N 100
int main(void)
{
    char str[N];
    scanf("%s",str);//输入asd123
    printf("%d",atoi(str[4])); 
    system("PAUSE");
    return 0;
}

运行:
在这里插入图片描述
回车之后 直接闪退
2)str[]输出的是ASSCI值

#include<stdio.h>
#define N 100
int main(void)
{
    char str[N];
    scanf("%s",str);//输入asd0123
    printf("%d",str[3]); 
    system("PAUSE");
    return 0;
}

在这里插入图片描述0的ASSCI值48
3)想要输出数字 用数字字符的ASSCI值和**‘0’**的ASSCI值做差

#include<stdio.h>
#define N 100
int main(void)
{
    char str[N];
    scanf("%s",str);//输入asd0123
    printf("%d",str[4]-'0'); //输出应该是1
    system("PAUSE");
    return 0;
}

运行:
在这里插入图片描述

Logo

欢迎大家加入成都城市开发者社区,“和我在成都的街头走一走”,让我们一起携手,汇聚IT技术潮流,共建社区文明生态!

更多推荐