weixin_45945082 2022-06-17 00:44 采纳率: 100%
浏览 69
已结题

C语言atoi函数使用中问题

C 语言中有个 atoi 函数(定义于 <stdlib.h> 头文件中),用于将字符串中的值解析为对应的整型数字。现在要求我们自己写一个程序,实现类似的功能。

基本要求:Powered by bbs.fishc.com
A. 将用户输入的字符串中代表数字的字符转换为整型数值4O]0QM
B. 打印转换结果来自:bbs.fishc.com
C. 只打印第一组数字来自:bbs.fishc.com
提示:你可以使用 break 语句在适当的时候跳出循环。

img

#include<stdio.h>

#include<stdlib.h>
int main()
{
char a[100];
int i,b;
printf("请输入一行英文字母:");
scanf("%s",a);
for(i=0;i<100;i++)
{
if(!(a[i]>='0'&&a[i]<='9')&&(a[i]!=' '))
{a[i]=' ';//将不是数字或者空格的字符换成空格。
printf("a[%d]=%c %d\n",i,&a[i],i);}
else
break; //第一次遇见数字或空格时跳出循环,计算整型数。
}
b=atoi(a);
printf("整数是%d i=%d",b,i);//putchar(b);这样不行,
return 0;
}
//问题,输入a空格123.45时,结果为0?

正常输入dfhd323.67 [s[;,\2435没有问题,但是只要先输入a 21.32(即中间含有空格),就不行了,结果输出为0。
我与正确解法不太一样,我的思路是把数字前面的非空格字符替换为空格,再调用atoi。
求解答
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-06-17 09:05
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        char a[100];
        int i, b = 0, flg;
        printf("请输入一行英文字母:");
        scanf("%[^\n]", a);//scanf("%s", a);
        for (i = 0, flg = 1; a[i] != '\0'; i++) //for (i = 0; i < 100; i++)
        {
            if (a[i] >= '0' && a[i] <= '9' && flg) //if(!(a[i]>='0'&&a[i]<='9')&&(a[i]!=' '))
            {
                flg = 0;
                b = atoi(a + i);
                printf("整数是%d i=%d\n", b, i);
                //break; //加上这句,实现只打印第一组数字,若不加,则可以打印后续的任意组数据
            }
            else if ((a[i] < '0' || a[i] > '9') && !flg)
                flg = 1;
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月25日
  • 已采纳回答 6月17日
  • 创建了问题 6月17日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法