我有一个任务要用 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);
}
}
}
最佳答案
我认为将 * 传递为 '*'(单引号)可以解决问题,因为 bash 不会扩展简单的引号字符串。
如果这也不允许,你可以看看这篇关于如何禁用 bash 扩展的帖子:Stop shell wildcard character expansion?
此外,这无法在您的程序内部完成,因为扩展发生在您的程序实际被调用之前。
问候
关于c - 从家庭作业计算器程序的命令行读取 * 字符时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36951781/