gpt4 book ai didi

C++,构造读取两个实数和一个字符的程序

转载 作者:行者123 更新时间:2023-11-30 01:43:33 26 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序能够读取两个实数,后跟一个用户输入的字符。然后程序将根据字符评估这两个数字。该角色可以是我在下面列出的任何角色:
1. +(加法)
2. -(减法)
3. *(乘法)
4./(除法)
5. %(余数)

下面我贴出了我编写的代码,只是为了检查打印出来的值是否正确:

#include<stdio.h>

int main(){
float a,b,add,subtract,division,multiply,remainder;
char op;

printf("Enter two real numbers followed by one these characters:+, -, *, /, or % : ");
scanf("%f%f %c",&a,&b,&op);
printf("%.1f %c %.1f\n",a,op,b);

if (op=='+'){
add = a + b;
printf("%f",add);
}
else if (op=='-'){
subtract=a-b;
printf("%f",subtract);
}
else if (op=='/'){
division=a/b;
printf("%f",division);
}
else if (op=='*'){
multiply =a*b;
printf("%f",multiply);
}
else if (op=='%'){
remainder=a%b;
printf("%f",remainder);
}
else{
printf("invalid symbol");
}
return 0;
}

谁能告诉我为什么会出现运行时错误?

最佳答案

注意:OP 在回答初始问题后对其进行了显着更改,这是本文关注的重点,因此下面的答案现在看起来可能完全偏离目标。


If anyone can explain why I see different values that would be greatly appreciated.

您的代码存在多个问题。

  1. 程序的命令行输入必须正确转换为 float 类型,但它会将它们转换为 int。您的scanf 应该使用"%f %f %c" 来获取实数 而不是整数 数;
  2. IIRC 根据你之前的图片,你对程序的实际输入如下所示:2 2 +,但是你的 scanf 显示 "%d%d % c"(注意格式字符串中缺少的空格与输入中的额外空格)
  3. 您的 printf 函数调用需要将参数交换为 printf("%f %c %f",a, op, b);(注意格式字符串使用 "%f"opb 变量的反转)

第 1 点基于为用户打印的文本,请求“真实”数字。

第二点和第三点是罪魁祸首,因为当你在提示符下输入 2 2 + 时,你的变量看起来是 a = 2, b = 2op = 43,即'+'字符的数值。

当您随后打印它时,您最终将 '+' 字符解释为一个整数,而您得到的是 43

程序的固定版本如下:

#include<stdio.h>

int main(){
float a, b, result;
char op;
printf("%s", "Enter two real numbers followed an operator (+, -, *, /, %): ");
scanf("%f %f %c", &a, &b, &op);

switch(op) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
/* make sure b != 0 */
result = a / b;
break;
case '%':
/* make sure b != 0 */
/* we type-cast to int because modulus is not defined for floats */
result = (float)((int)a % (int)b);
break;
default:
printf("%s\n", "Unknown operation");
break;
}

printf("%f %c %f = %f",a, op, b, result);
return 0;
}

它的用法和输出:

➜  /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 5 5 +
5.000000 + 5.000000 = 10.000000
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 5 5 *
5.000000 * 5.000000 = 25.000000%
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 5 5 /
5.000000 / 5.000000 = 1.000000%
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 10 5 %
10.000000 % 5.000000 = 0.000000%
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 5 10 %
5.000000 % 10.000000 = 5.000000%
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 8 5 -
8.000000 - 5.000000 = 3.000000

关于C++,构造读取两个实数和一个字符的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37516242/

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