我的简单计算器程序需要一些帮助。它似乎工作正常,直到我使用*
符号进行乘法。当我使用*
符号时,它变为99
而不是42
的ASCII等价物。它期望的参数是整数,运算符(+
,-
,*
,/
)和另一个整数。
#include <stdio.h>
#include <stdlib.h>
/*
void usage() {
printf("This is a calculator program, just put in to numbers and and operator\n");
printf("Example:\n\t2 + 2\n");
}
*/
int main(int argc, char *argv[]) {
int first_number, second_number;
int symbol;
int sum;
first_number = atoi(argv[1]);
second_number = atoi(argv[3]);
symbol = (int)*argv[2];
printf("symbol varable = %d\n", symbol); // debugging for argv[2]
if (symbol == 43 ) {
sum = first_number + second_number;
printf("sum = %d\n", sum);
}
else if (symbol == 45 ) {
sum = first_number - second_number;
printf("sum = %d\n", sum);
}
else if (symbol == 42) {
sum = first_number * second_number;
printf("sum = %d\n", sum);
}
else if (symbol == 47) {
sum = first_number / second_number;
printf("sum = %d\n", sum);
}
return 0;
}
答案 0 :(得分:3)
问题与您的代码无关。
使用命令行参数(如12 * 12
)运行程序时,您在命令行中放置一个通配符,shell会看到*
并将其替换为目录中每个文件名的列表 - 如果符号出现99,则目录中的第一个程序必须以小写c开头。
要使其工作,请转义命令行参数,例如12 '*' 12
或12 \* 12
,或完全禁用文件名通配,如下面的答案所示:Stop shell wildcard character expansion?