C 计算机程序问题
我正在努力弄清楚为什么这个程序不起作用。它应该执行如下操作 5*4=204+2*8=206/3-2=0 然而,事情并不顺利 说明如下: 编写一个名为calculate的C程序,执行简单的算术运算。程序从命令行获取3或5个参数 我不知道现在该怎么办C 计算机程序问题,c,C,我正在努力弄清楚为什么这个程序不起作用。它应该执行如下操作 5*4=204+2*8=206/3-2=0 然而,事情并不顺利 说明如下: 编写一个名为calculate的C程序,执行简单的算术运算。程序从命令行获取3或5个参数 我不知道现在该怎么办 int calc(int x, char op, int y) { if (op == '+') { return (x+y); } if (op == '-') { return (x-y);
int calc(int x, char op, int y) {
if (op == '+') {
return (x+y);
}
if (op == '-') {
return (x-y);
}
if (op == 't') {
return (x*y);
}
if (op == '/') {
return (x/y);
}
}
int main(int argc, char *argv[]) {
int a,b,c,result,doOp;
char op1, op2;
if (argc == 4 || argc == 6) {
a = atoi(argv[1]);
b = atoi(argv[3]);
op1 = *argv[2];
} else {
printf("Wrong number of arguments!");
return 0;
}
if (argc == 6) {
c = atoi(argv[5]);
op2 = *argv[4];
if ((op1 == '+' || op1 == '-') && (op2 == '/' || op2 == 't')) {
result = calc(a, op1, calc(b, op2, c));
printf("%d", result);
}
if ((op2 == '+' || op2 == '-') && (op1 == '/' || op1 == 't')) {
result = calc((calc(a, op1, b)), op2, c);
printf("%d", result);
} else {
result = calc((calc(a, op1, b)), op2, c);
printf("%d", result);
}
}
if (argc == 4) {
result = calc(a, op1, b);
printf("%d", result);
}
return 0;
}
给你,阿里扎。
问题有好几个,但最主要的一个是检查中缺少的“else”,以确定使用哪个计算器排序
int calc(int x, char op, int y) {
if (op == '+') {
return (x+y);
}
if (op == '-') {
return (x-y);
}
if (op == 't') {
return (x*y);
}
if (op == '/') {
return (x/y);
}
printf("Unknown operator!"); // added error check
}
int main(int argc, char *argv[]) {
int a,b,c,result,doOp;
char op1, op2;
if (argc == 4 || argc == 6) {
a = atoi(argv[1]);
b = atoi(argv[3]);
op1 = *argv[2];
} else {
printf("Wrong number of arguments!");
return 0;
}
if (argc == 6) {
c = atoi(argv[5]);
op2 = *argv[4];
if ((op1 == '+' || op1 == '-') && (op2 == '/' || op2 == 't')) {
result = calc(a, op1, calc(b, op2, c));
printf("%d", result);
}
// added else if
else if ((op2 == '+' || op2 == '-') && (op1 == '/' || op1 == 't')) {
result = calc((calc(a, op1, b)), op2, c);
printf("%d", result);
}
else {
result = calc((calc(a, op1, b)), op2, c);
printf("%d", result);
}
}
if (argc == 4) {
result = calc(a, op1, b);
printf("%d", result);
}
return 0;
}
“事情没有进展!”——这还不够。到目前为止,您进行了哪些调试工作,这些工作的结果是什么?。就潜在的bug而言,
calc
中的(x/y)
正在执行整数除法,这意味着它将截断余数,不留下小数结果。该函数还应该警告并非所有的代码路径都指定返回值,而且如果您的输入被成功解析,那么这在逻辑上可能不适用于您,但无论如何您都不会实际验证您的输入,因此,这纯粹是赌博,行为不明确。main
中的if
和else
语句结构不正确。如果If((op1='+'| | op1='-')&&(op2='/'| | op2=='t')
为true,则它在那里执行语句,但也执行else
中的语句。它后面的if
应该是else if
。(或者,可以对它们进行重组以减少案例。)除此之外,显示失败的测试案例,包括您看到的输出和您期望从工作程序获得的输出。当argc==6
时,您有两个if
语句和一个else
。您只需要第一个if
和else
。第二个,如果做的事情与其他完全相同,那么它就不需要了。那么“4+2*8=20
”应该是4+2t8=20
?