Linux下C语言 命令行参数 输入 ‘*’ 引起的错误——c语言计算器程序
今天做实验楼的C计算器小程序实验,把scanf输入改编成通过argv输入参数。
+,-,/三种运算都可以。
代码如下
#include<stdlib.h>
int main(int argc,char* argv[])
{
double num1 = 0.0 ,num2 = 0.0;
double num = 0.0;
char op = '+';
printf("%s\n",argv[0]);
printf("%s\n",argv[1]);
printf("%s\n",argv[2]);
printf("%s\n",argv[3]);
if(argc < 4)
{
printf("error,input isn't enough.\n");
exit(1);
}
num1 = atof(argv[1]);
op = argv[2][0];
num2 = atof(argv[3]);
switch(op)
{
case '+':
num = num1 + num2;
break;
case '-':
num = num1 - num2;
break;
case '*':
num = num1 * num2;
break;
case '/':
if(num2 == 0.0)
{
printf("error,num2 = 0.\n");
exit(1);
}
num = num1 / num2;
break;
default:
printf("error,op wrong.\n");
exit(1);
}
printf("num = %lf\n",num);
return 0;
}
输入其他的参数如“1 + 2”,“4 / 0”等都有相应的结果,然后输入带“4 * 46”等带星号的结果会出现op操作符错误。
打断点测试,op获取的argv[2]的首字符是a。
起初我以为是ascii码的问题,经排查无误,然后我写了几行,显示argv所有参数的字符串,这才发现了问题。
argv[2]的参数竟然是anaconda3这种莫名其妙的字符串,原来是linux下*被当作通配符,匹配到了文件夹内的字典排序的第一个文件名。通过\*就可以正常显示了。
实际生产时总会出现各种各样理论中不会出现的问题,还需多多努力。