用C语言读取计算器的字符串输入

用C语言读取计算器的字符串输入,c,calculator,C,Calculator,基本上,我试图从用户那里获得一个字符串,格式为:3+2,作为单个字符串,分别检查字符串的组成部分并进行计算。我已经有了使用命令行输入的计算器程序,但是如果用户不使用命令行,我需要从用户那里获取并读取字符串输入 这就是我目前所拥有的。请注意:( #包括 #包括 int main(int argc,char*argv[]){ int num1,num2; 浮动ans; 字符算子; int i=0,j=0; 字符s[100]=“”; 字符s1[100],s2[100]; 如果(argc==4){ ss

基本上,我试图从用户那里获得一个字符串,格式为:3+2,作为单个字符串,分别检查字符串的组成部分并进行计算。我已经有了使用命令行输入的计算器程序,但是如果用户不使用命令行,我需要从用户那里获取并读取字符串输入

这就是我目前所拥有的。请注意:(

#包括
#包括
int main(int argc,char*argv[]){
int num1,num2;
浮动ans;
字符算子;
int i=0,j=0;
字符s[100]=“”;
字符s1[100],s2[100];
如果(argc==4){
sscanf(argv[1]、“%d”、&num1);
sscanf(argv[2]、“%c”和运算符);
sscanf(argv[3]、“%d”、&num2);
开关(操作员){
案例“+”:ans=num1+num2;
printf(“%d%c%d=%.2f\n”,num1,运算符,num2,ans);
打破
案例'-':ans=num1-num2;
printf(“%d%c%d=%.2f\n”,num1,运算符,num2,ans);
打破
案例“x”:
案例“X”:ans=num1*num2;
printf(“%d%c%d=%.2f\n”,num1,运算符,num2,ans);
打破
案例“^”:ans=pow(num1,num2);
printf(“%d%c%d=%.2f\n”,num1,运算符,num2,ans);
打破
案例“/”:如果(num2==0){
printf(“错误!被零除!\n”);
}
否则{
ans=num1/num2;
printf(“%d%c%d=%.2f\n”,num1,运算符,num2,ans);
}           
打破
默认值:printf(“%c”不是有效的运算符!\n”,运算符);
}}
其他的
如果(argc==3){
sscanf(argv[1]、“%c”和运算符);
sscanf(argv[2]、“%d”、&num1);
开关(操作员){
案例“n”:
案例“N”:ans=-num1;
printf(“-(%d)=%.2f\n”,num1,ans);
打破
案例“a”:
案例“A”:ans=晶圆厂(num1);
printf(“|%d |=%.2f\n”,num1,ans);
打破
案例s:
案例:如果(num1<0){
printf(“找不到负数的平方根\n”);
}
否则{
ans=sqrt(num1);
printf(“Sqrt(%d)=%.2f\n”,num1,ans);
}
打破
默认值:printf(“%c”不是有效的运算符!\n”,运算符);
} }
else如果((argc!=3)|(argc!=4)){
printf(“输入要计算的字符串:”);
获取(s);
而(s[i]!='\0'){
s[i]=argv[1];
i++;
} 
虽然
(s[i]!='\0'){
s[i]=argv[2];
i++;
}
虽然
(s[i]!='\0'){
s[i]=argv[3];
i++;
}}
}
其他的
printf(“输入错误!!!\n”);
}

首先,您应该使用读取输入,因为
获取
容易发生缓冲区溢出:

fgets(s, sizeof(s), stdin);
然后,您只需使用
sscanf
即可获得所需的数据:

sscanf(s, "%d %c %d", &num1, &operator, &num2);

首先,您应该使用从用户处获取一行输入。其次,整个字符串以
'\0'
结尾,而不是字符串中的每个“单词”。第三,查找函数以在分隔符上拆分字符串。第四点,您尝试将字符串(例如
argv[1]
)分配给字符(
s[i]
)。最后,您可以直接在读取的字符串上使用
sscanf
,无需拆分。
但如果用户不使用命令行,我需要从用户那里获取并读取字符串输入-
-那么这具体是您的问题吗?使用适当的字符串函数并使其与计算器一起工作
sscanf(s, "%d %c %d", &num1, &operator, &num2);