【发布时间】:2021-02-14 18:38:13
【问题描述】:
我正在用 C 语言编写一个用于基本计算器的程序。我正在尝试使用到目前为止所学的知识来做到这一点:printf() 和 scanf() 函数。我通过命令行将参数传递到我的程序中。我假设一次将传递三个参数,其中包括:第一个 int、一个运算符和第二个 int。我想检查传递的第二个参数是否是运算符,然后检查它是否为 +、-、*... 等等。这是我想出的:
int main(int argc, char **argv) {
scanf("%d %c %d", &a, &oper, &b);
if (oper != 43) {
printf("Error: Operator is not a +");
return(1);
}
}
很明显,我省略了很多代码并保留了相关部分。在这里,我只是检查操作符是否为 +。 ASCII 键是 43,所以我认为这会起作用,但没有运气!有任何想法吗? (如果可能的话,我想看看我是否可以只使用 printf 和 scanf 来做到这一点)
编辑:例如,如果输入 12 b 13,它应该返回上面的错误。 '10 +a 10' 或 '10 ++ 10' 也是如此。
【问题讨论】:
-
char ++argv?您似乎错过了书籍或教程中的某些内容。要么,要么你需要创建一个合适的minimal reproducible example 来展示给我们。 -
不要使用magic numbers。如果
43是指'+'的ASCII 码,请改用实际字符。 -
错字!!刚刚修好了。
-
scanf函数仅从标准输入读取。如果您想将输入作为命令行参数,那么您需要检查argv中的字符串(在first 检查argc之后)。网上确实有很多关于如何使用命令行参数的教程。你搜索过什么?你发现了什么?他们告诉你什么? -
如果你将命令行参数传递给你的程序,你不需要
scanf()。argc告诉您命令行上有多少个参数,argv[]将这些参数保存为以 nul 结尾的字符串。 (例如,argv[1]是第一个参数,argv[2]第二个,...)注意,argv[0]始终是正在运行的程序名称。你会检查if (argc < 3) { /* error: too few args */ }。您可以使用sscanf (argv[1], "%d", &a)转换值(同时检查返回)然后您可以switch(*argv[2])打开第二个参数中的第一个字符,您的情况将是'+'、'-'、..跨度>
标签: c printf scanf command-line-arguments