【发布时间】:2021-05-10 22:15:59
【问题描述】:
首先,我想做一个简单的计算器程序。
我输入公式为2-3*4。此外,该代码是按照运算符之间的优先顺序排列的。
如果我提到意外的结果,根据等式在result=(usertxt[i] * usertxt[i + 2]); printf("%d\n", result); usertext[i]=3, usertext[4],那么我在这段代码中从result 得到2652。当我期望 12 来自 result 时,我该如何纠正这个问题?提前致谢。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned int i;
int main() {
char a[100] = { 0, }, usertxt[100] = { 0, };
a[99] = 0;
int result = 0;
int myoperator = 0;
int num;
printf("Please, enter your calculation\n");
gets_s(a,sizeof(a));
printf("You entered: %s\n", a);
num = strlen(a);
printf("Number of characters: %d\n", num);
for (int i = 0; i < num; i++) {
usertxt[i + 1] = a[i];
printf("%c", usertxt[i + 1]);
}
for (int i = 0; i < num; i++) {
if (usertxt[i + 1] == '*' || usertxt[i + 1] == '/') {
myoperator = usertxt[i + 1];
}
{
switch (myoperator) {
case '*':
printf("Multiplication operation\n");
printf("%c%c", usertxt[i], usertxt[i + 2]);
result = 0;
result = (usertxt[i] * usertxt[i + 2]);
printf("%d\n", result);
break;
case '/':
printf("Division operation\n");
result = usertxt[i] / usertxt[i + 2];
printf("Result=%d\n", result);
break;
}
}
}
int i = 0;
for (int i = 0; i < num; i++) {
if (usertxt[i + 1] == '+' || usertxt[i + 1] == '-') {
myoperator = usertxt[i + 1];
}
{
switch (myoperator) {
case '+':
printf("Addition operation\n");
result = usertxt[i] + usertxt[i + 2];
printf("Result=%d\n", result);
break;
case '-':
printf("Subtraction operation\n");
result = usertxt[i] - usertxt[i + 2];
printf("Result=%d\n", result);
break;
default:
printf("Please, try again.\n");
break;
}
}
}
return 0;
}
【问题讨论】:
-
这可以编译吗?
gets_s(a)缺少sizeInCharacters参数。另外请不要使用不可移植和不可读的硬编码,例如case 42:但case '*':。 -
'我该如何解决这个问题?' ........您是否考虑过调试您的应用程序?
-
当然。马丁詹姆斯
-
风向标,我可以编译它,但我说的结果是意外的。代码变得更加不稳定。可以再看一遍吗?
-
if (usertxt[i + 1] > 41) {