我正在尝试编写一个能够读取两个实数的程序,后跟一个由用户输入的字符。然后程序将按角色评估两个数字。角色可以是我在下面列出的任何角色:
1. +(加成)
2. - (减法)
3. *(乘法)
4. /(师)
5.%(余数)
下面我发布了我编写的代码,以检查打印出的值是否正确:
class BaseClass {
public string prop1;
public string prop2;
public string prop3;
}
class C1 : BaseClass {
public string prop3; // Common with class C2
public string prop4;
}
class C2 : BaseClass {
public string prop3; // Common with class C1
public string prop5;
}
有人能告诉我为什么会出现运行时错误吗?
答案 0 :(得分:3)
注意: OP在回答后显着改变了初始问题,这是本文重点关注的问题,所以下面的答案可能看起来完全偏离目标。
如果有人能够解释为什么我会看到不同的值,那将非常感激。
您的代码存在多个问题。
float
类型,但会将它们转换为int
s。您的scanf
应使用"%f %f %c"
来取代真实的号码,而不是整数号码; 2 2 +
,但您的scanf
说"%d%d %c"
(请注意格式字符串中缺少的空格与您的额外空间输入中的空格)printf
函数调用需要交换的参数说printf("%f %c %f",a, op, b);
(注意使用"%f"
的格式字符串以及op
和b
变量的反转) 第一点基于用户的印刷文本,请求"真实"号。
第二点和第三点是罪魁祸首,因为当您在提示符处输入2 2 +
时,您的变量看起来是a = 2
,b = 2
和op = 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
答案 1 :(得分:1)
问题在于您打印它的方式。您尝试将数字打印为char,将char打印为数字:
printf("%d %c %d",a,b,op);
我认为你的意思是:
printf("%d %d %c",a,b,op);
所以它只是打印b的ASCII值,这会给你一个有趣的角色。