我正在学习 C,我正在尝试创建这个程序,它要求按顺序输入一个运算符 (+,-,*,%),一个数字,然后使用 scanf、printf 和 getchar( ).当我最后询问运算符(operator)时它有效,但我必须先与运算符(operator)联系。
这是我想出的有效代码(但顺序不对):
char operator;
int numbers[2];
int result;
printf("Enter the first number:");
scanf("%9d", &numbers[0]);
printf("Enter the second number:");
scanf("%9d", &numbers[1]);
printf("Enter operation:");
getchar();
operator = getchar();
if (operator == '+') {
result = numbers[0] + numbers[1];
}
else if (operator == '-') {
result = numbers[0] - numbers[1];
}
else if (operator == '*') {
result = numbers[0] * numbers[1];
}
else if (operator == '/') {
result = numbers[0] / numbers[1];
}
else {
result = 0;
}
printf("%d", result);
这是没有的代码:
printf("Enter operation:");
getchar();
char operator = getchar();
if (operator == '+') {
result = numbers[0] + numbers[1];
}
else if (operator == '-') {
result = numbers[0] - numbers[1];
}
else if (operator == '*') {
result = numbers[0] * numbers[1];
}
else if (operator == '/') {
result = numbers[0] / numbers[1];
}
else {
result = 0;
}
printf("Enter the first number:");
scanf("%9d", &numbers[0]);
printf("Enter the second number:");
scanf("%9d", &numbers[1]);
printf("%d", result);
这个给出了一个随机变量。
如果代码不在 block 中,请原谅我,我已尽力按照说明进行操作。
最佳答案
赋值运算符的结果是“此刻”计算的:表达式...
result = a + b;
... 当 a
或 b
更改它们的值时,不会使 result
更改其值。
这就是为什么你的第一个代码片段按计划工作,而你的第二个代码片段显示垃圾,因为你首先尝试计算一些垃圾值的一些二进制操作的结果(numbers
数组元素存储before 他们被分配了一些有用的东西),然后才尝试从用户那里获得一些输入。
关键是 result
在这一点上已经有一些值(value),而且这个值(value)不会改变 - 当然,除非你进行第二次分配。 )
修复此程序非常容易:只需将实际计算与输入部分分开即可。这样……
if (operator == '+') {
result = numbers[0] + numbers[1];
}
else if (operator == '-') {
result = numbers[0] - numbers[1];
}
else if (operator == '*') {
result = numbers[0] * numbers[1];
}
else if (operator == '/') {
result = numbers[0] / numbers[1];
}
else {
result = 0;
}
... 将遵循所有printf/scanf
部分(显然,打印结果的部分除外)。顺便说一句,你可以使用 switch
来达到同样的目的:
switch(operator) {
case '+':
result = numbers[0] + numbers[1]; break;
case '-':
result = numbers[0] - numbers[1]; break;
case '*':
result = numbers[0] * numbers[1]; break;
case '/':
result = numbers[0] / numbers[1]; break;
default:
result = 0;
}
关于c - 尝试从 getchar() 获取变量以在简单的计算程序中保持其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13348707/