c - 尝试从 getchar() 获取变量以在简单的计算程序中保持其值

标签 c printf calculator scanf getchar

我正在学习 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;

... 当 ab 更改它们的值时,不会使 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/

相关文章:

c - 当参数之一是函数调用时,printf 如何在 c 中工作

scala - Scala 中类型安全的格式化输出

javascript - 使用事件处理程序的简单 JavaScript 计算器

java - 精确到小数点后 20 位的黄金比例

c - 如何在另一个子字符串中找到多次出现的子字符串并执行 'some' 操作?

c - 是否可以在同一行中对其进行数学运算时获取变量的地址

c - printf 忽略单个反斜杠 '\'

二进制到标准数字?

将指针转换为 void

javascript - 在浏览器中运行 C