dlzy_deft 2019-11-13 16:37 采纳率: 50%
浏览 1102
已采纳

C语言如何提取命令行输入的字符串中的整数,并传递到自定义函数?

比如
键盘输入: gcd(n,m)
⭐**在函数中提取m,n的值并计算结果? (因为有多个整形数值,并且有个','所以这种下面写法无法实现取值。。。。**

    char str[80], digit[80];
    char* ps;
    int i = 0;

    ps = str;
    while (*ps != '\0')
    {
        if (*ps >= '0' && *ps <= '9' || ps==',')
        {
            digit[i] = *ps;    //找到数字,存放到数组digit里
            i++;
        }
        ps++;    //ps指针指向字符串下一个字符
    }
    digit[i] = '\0';    //为了能用%s输出,digit在末尾要加一个结束字符'\0'
    printf("%s\n", digit);
```)

``

**如果要传递m,n,o,q多个整形数据呢?

**
以下是我代码的摘要

 int main(argc,argv[])

char* stdinin = NULL;
stdinin = ufgets(stdin);       //ufgets是自定义函数,类似于fgets
//然后是一些判断是否输入为空等
 if (strncmp(stdinin, "gcd", 3) == 0)
        gcd(m, n);
//----函数-----
void gcd(n, m)
{
    这里并不能直接使用stdinin

}
  • 写回答

1条回答 默认 最新

  • @矛盾综合体 2019-11-13 17:02
    关注

    代码我写了,如果有其他需求需要修改一个也没什么,可以很快修改,我也写了详细的注释
    还有疑惑也可以交流,如果不是需求,应该也是小的改动。

    下面是几次的测试,环境是gcc的,为了方便检查,输出我加入了运算过程
    ,不需要,你可以去掉,希望能对你有所帮助,空闲时间有点少,写的也就有点乱。

    图片说明

    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    int  gcd(int i,int j)//你需要执行的函数,可以换的
    {
        printf("%d   %d\n",i,j);
        return i+j;
    }
    int change(char *str)//将一串字符串转换成一个数字
    {
        int a[256]={0};
        int i=0;
        int j=0;
        int num=0;
        while(str[i])
        {
            if((str[i]>=48)&&str[i]<=57)
            {
                a[j]=str[i]-48;
                j++;
            }
            i++;
        }
        for(i=0;i<j;i++)
        {
            num=num*10+a[i];
        }
        return num;
    }
    int main() 
    { 
        char s1[256],s2[256];
        char now_time[256];
        int i,j,key,n,m;
        while(1)
        {
            memset(s1,0,256);
            memset(s2,0,256);
            memset(now_time,0,256);//每次对三个数组进行清零,如果没有学过可以查一下,也是string的基本函数
            key=n=m=0;
            scanf("%s",s1);//输入字符串
            j=strlen(s1);
            if((s1[0]!='g')|(s1[1]!='c')|(s1[2]!='d')|(s1[3]!='(')|(s1[j-1]!=')'))//针对输出格式错误的采取报错忽略
            {
                printf("input error\n");
                continue;
            }
            s1[j+1]=s1[j];
            s1[j]=',';//在最后一个自动添加一个‘,’号,确保每个‘,’前均是一个操作数
            strcpy(s1,&s1[4]);//将输入字符串前进4格,去除前面的格式
            j=strlen(s1);//记录字符串长度,作为后面的结束的判断标志 
            for(i=0;i<=j;i++)
            {
                if(s1[i]!=',')//获取第一个操作数
                {
                    now_time[n++]=s1[i];
                }
                else
                {
                    n=change(now_time);//将操作数由字符串转为数字
                    m=gcd(m,n);//进行操作,第一次m为默认0,你可以自己设置其他不影响gcd函数的值
                    //当然你也可以通过加一些其他修改,这样写只是为了方面代码实现,后面的m均表示前面的数字的运算和
                    n=0;//操作数清零,等待下一次操作
                    memset(now_time,0,256);//获取操作数字符串清零
                }
    
            }
            printf("end=%d\n",m);//输出最后运算结果
        }
       return 0; 
    } 
    
    
    

    ss

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

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面