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

时间:2016-05-30 00:33:29

标签: c++ if-statement char

我正在尝试编写一个能够读取两个实数的程序,后跟一个由用户输入的字符。然后程序将按角色评估两个数字。角色可以是我在下面列出的任何角色:
 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;
}

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

2 个答案:

答案 0 :(得分:3)

注意: OP在回答后显着改变了初始问题,这是本文重点关注的问题,所以下面的答案可能看起来完全偏离目标。

  

如果有人能够解释为什么我会看到不同的值,那将非常感激。

您的代码存在多个问题。

  1. 您的程序的命令行输入必须正确转换为float类型,但会将它们转换为int s。您的scanf应使用"%f %f %c"来取代真实的号码,而不是整数号码;
  2. 您之前的图片中的IIRC,您对该计划的实际输入如下所示:2 2 +,但您的scanf"%d%d %c"(请注意格式字符串中缺少的空格与您的额外空间输入中的空格)
  3. 您的printf函数调用需要交换的参数说printf("%f %c %f",a, op, b);(注意使用"%f"的格式字符串以及opb变量的反转)
  4. 第一点基于用户的印刷文本,请求"真实"号。

    第二点和第三点是罪魁祸首,因为当您在提示符处输入2 2 +时,您的变量看起来是a = 2b = 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
    

答案 1 :(得分:1)

问题在于您打印它的方式。您尝试将数字打印为char,将char打印为数字:

printf("%d %c %d",a,b,op);

我认为你的意思是:

printf("%d %d %c",a,b,op);

所以它只是打印b的ASCII值,这会给你一个有趣的角色。