C.命令行计算器有什么问题?

时间:2016-04-06 10:58:45

标签: c

我将此代码作为C中的简单命令行计算器。

Future<Type1> item1 = ComputeParam1();
Future<Type2> item2 = ComputeParam2();
Future<Type3> item2 = ComputeParam3();

MyItem item = new MyItem();

assignParam1(item1.get());
assignParam2(item2.get());
assignParam3(item3.get());

在我编写代码并运行它之后。发生了一些错误。

例如,我使用命令:./ main 1 + 2(应该是3)

输出是: 输入错误!!! 0

如果我使用命令:./ main

输出是: 输入错误 输入错误!!! 0

我不知道哪里错了。请帮忙!!非常感谢!!我是C的初学者。

2 个答案:

答案 0 :(得分:2)

一些问题:

  1. 您使用scanf代替sscanf来解析角色。
  2. 您不会检查sscanf s的返回值。
  3. switch和最终的printf应该 if内,而不是在#include <stdio.h> /* #include <math.h> Unused header */ int main(int argc, char* argv[]) { int num1, num2, result; char op1; if (argc != 4) { fprintf(stderr, "Program requires exactly 3 arguments (excluding program name), Too %s given; Exiting...\n", argc < 4 ? "few" : "many"); return -1; } if(sscanf(argv[1], "%d", &num1) == 1 && sscanf(argv[2], "%c", &op1 ) == 1 && sscanf(argv[3], "%d", &num2) == 1) { switch (op1) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case 'x': result = num1 * num2; break; case '/': if(num2 == 0) { fputs("Division by zero is not possible; Exiting...", stderr); return -2; } result = num1 / num2; break; case '%': if(num2 == 0) { fputs("Division by zero is not possible; Exiting...", stderr); return -3; } result = num1 % num2; break; default: fprintf(stderr, "Invalid operator '%c'; Exiting...\n", op1); return -4; } printf("Result = %d\n", result); } else { fputs("Failed to parse arguments successfully; Exiting...", stderr); return -5; } return 0; } 之外。
  4. 您不会通过零问题检查除法。
  5. 以下是经过纠正的代码,其中包含一些较小的修改(未经测试)

    "

    哦,shell有一些特殊字符可以做东西。为避免出现问题,请使用./main "1" "+" "2" 包装每个参数,如:

    ASSERT_EQ(6, evaluate("2+2\\0+2"))
    

答案 1 :(得分:1)

没有必要sscanf()给出表达式的每个部分已经在一个单独的字符串中:

if (argc == 4){
    num1 = atoi(argv[1]);
    op1 = argv[2][0];
    num2 = atoi(argv[3]);
}