我将此代码作为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的初学者。
答案 0 :(得分:2)
一些问题:
scanf
代替sscanf
来解析角色。sscanf
s的返回值。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;
}
之外。以下是经过纠正的代码,其中包含一些较小的修改(未经测试):
"
哦,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]);
}