gpt4 book ai didi

c - 努力编写一个简单的计算器

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:09 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的计算器。
首先是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

char operator = 0;
float num1 = 0.0;
float num2 = 0.0;
float sol = 0.0;


while (operator != 'q') {

printf("Operator: ");
scanf("%c", &operator);
printf("First Number: ");
scanf("%f", &num1);
printf("Second Number: ");
scanf("%f", &num2);

switch (operator)
{
case '+': sol = num1 + num2; break;
case '-': sol = num1 - num2; break;
case '*': sol = num1 * num2; break;
case '/': sol = num1 / num2; break;
case 'q': printf("Finished!"); exit(0);
default: printf("Error!"); exit(0);
}

printf("The solution is: %.2f\n\n", sol);
}

return 0;
}

所以对我来说代码没问题。如您所见,我使用一个 while 循环来执行此操作,该循环允许您计算直到您输入“q”作为运算符。循环的第一次运行运行良好,但随后变得令人毛骨悚然(我的控制台):

Operator: +
First Number: 5
Second Number: 4
The solution is: 9.00

Operator: First Number:

为什么程序不允许我在第二个循环运行时输入运算符?

最佳答案

大多数带有 scanf 的格式说明符都会跳过前导空格。 %c 没有。
scanf("%f", &num2); 在第一次迭代结束时在输入缓冲区中留下一个换行符。
scanf("%c", &operator); 在第二次迭代开始时,读取换行符并继续。
scanf("%c", &operator); 中的 %c 之前使用空格将允许 %c 跳过前导空格并捕获运营商。

关于c - 努力编写一个简单的计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33633508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com