比如
键盘输入: 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
}
代码我写了,如果有其他需求需要修改一个也没什么,可以很快修改,我也写了详细的注释
还有疑惑也可以交流,如果不是需求,应该也是小的改动。
下面是几次的测试,环境是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