【发布时间】:2021-05-06 00:11:29
【问题描述】:
我只是想在 Windows 上使用带有运算符 + - * / 的 gcc 6.3.0 用 C 编写一个小计算器。 它工作正常,但如果我选择 *,它会列出我的 argv[] 数组中目录中的所有文件。 第一个 for 循环仅用于调试。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
for(int i = 0; i < argc; i++) {
printf("%s\n", argv[i]);
}
if(argc != 4) {
printf("\nFalsche Syntax!\n");
exit(1);
}
double a,b,c;
char op;
sscanf(argv[1], "%lf", &a);
sscanf(argv[2], "%c", &op);
sscanf(argv[3], "%lf", &b);
switch(op) {
case '+':
c = a + b;
break;
case '-':
c = a - b;
break;
case '*':
c = a * b;
break;
case '/':
c = a / b;
break;
default:
printf("\nUnbekannter Operator!\n");
exit(1);
}
printf("\n\t%.5g %c %.5g = %.5g\n", a, op, b, c);
}
有什么建议吗?提前致谢
【问题讨论】:
-
"*"有效,只是不太方便。\*列出了上面的目录。我只是在 windows 编辑器中做了这个并使用 gcc (MinGW.org GCC-6.3.0-1) 6.3.0 编译它 -
不,不方便,但这是唯一的方法。在类 Unix 的 shell 中,通配符
*会在您的程序甚至运行之前立即扩展为文件列表,因此您的程序无法要求不执行此操作。 (换句话说,当你的程序开始运行时,为时已晚。)[编辑:根据 bruceg 刚才所说的,我可能在 MinGW 下“没有办法让你的程序询问”是错误的。]跨度> -
这是MinGW
globbing的神器。您可以尝试将其关闭,如下所示:willus.com/mingw/_globbing.shtml 通过添加_CRT_glob/ 的外部声明 -
其他可能性是: (1) 让您的程序提示用户输入表达式,而不是通过
argv从调用命令行获取它们。 (2) 重写你的程序以接受“x”而不是*进行乘法运算。 -
您也可以将表达式写入文件,然后使用该文件为您的程序指定输入:
executable.exe <file.txt
标签: c windows mingw calculator