我有一个在C中创建计算器程序的任务,该程序总共需要4个命令行参数,解析整数和算术运算符,执行操作并以1 + 1 = 2的形式打印解决方案。我的程序按预期工作,除了*用于乘法。我知道*是bash中的一个特殊字符,当我使用\来逃避它时,我的程序正常工作。例如:$ lab3 1 \*
3返回3.但是,要求用户转义星号不符合我的作业要求。有没有办法将*解析为char变量?
我的整个计划:
#include <stdio.h>
int main(int argc, char **argv)
{
int n1, n2;
char operand[1];
char garbage[100];
if(argc != 4) {
printf("invalid input!");
return 0;
}
else if(sscanf(argv[1], "%d %s", &n1, garbage) != 1) {
printf("%s is not a number\n", argv[1]);
return 0;
}
else if(sscanf(argv[3], "%d %s", &n2, garbage) != 1) {
printf("%s is not a number\n", argv[3]);
return 0;
}
else if(sscanf(argv[2], "%c %s", operand, garbage) != 1) {
printf("%s is not a valid argument\n", argv[2]);
}
else
{
if(*operand == '+') {
printf("%d + %d = %d\n", n1, n2, n1 + n2);
}
else if(*operand == '-') {
printf("%d - %d = %d\n", n1, n2, n1 - n2);
}
else if(*operand == '*') {
printf("%d * %d = %d\n", n1, n2, n1 * n2);
}
else if(*operand == '/') {
printf("%d / %d = %d\n", n1, n2, n1 / n2);
}
}
}
答案 0 :(得分:1)
我认为将*作为'*'(简单引号)传递就可以了,因为bash不会扩展简单的引用字符串。
如果不允许这样做,您可以查看有关如何禁用bash扩展的帖子:Stop shell wildcard character expansion?
此外,由于在实际调用程序之前进行扩展,因此无法在程序内部完成此操作。
此致