在 if 语句 returns 中浮动而不是给定值

Float in if statements returns negative instead given value

你好我正在学习 C,我很困惑为什么这行 returns -126.00 而不是 130.00

这里是源代码:

char course1(char course, float price){

    if(course == 'E' || course == 'e') {
        printf("You have taken PHP!\n");
        price = 130.00;
        return price; //returns -126.00
    }
    else
        printf("Invalid!\n");
    return 0;
}
int main() {  
   char course;
   float totalCourse;
   float y = 0;
   scanf(" %c", &course);
   totalCourse += course1(course, y);
   printf("In main, the total is %.2f", totalCourse);

   return 0;
}

当我 运行 代码,并输入 'E' C returns -126 而不是源代码中给出的 130 时。谁能解释为什么会这样?

对于初学者来说,函数中不使用参数 price。即忽略它的值。

char course1(char course, float price){

    if(course == 'E' || course == 'e') {
        printf("You have taken PHP!\n");
        price = 130.00;
        return price; //returns -126.00
    }
    else
        printf("Invalid!\n");
    return 0;
}

其次,该函数具有 return 类型 char 而不是 float。它至少应该有 return 类型 float.

除此之外,变量 totalCourse 未初始化。

float totalCourse;

所以这个复合赋值运算符+=

totalCourse += course1(course, y);

调用未定义的行为。

数据类型 char 通常是 signed,您的情况也是如此。 signed char 通常具有从 -128 到 +127 的范围。

您将值 130 分配给这种数据类型。通过常用的二进制补码,值 130 被“环绕”:

  • ...
  • 127 -> +127
  • 128 -> -128
  • 129 -> -127
  • 130 -> -126

编辑:

如果您从范围以上的输入中减去可能值的数量,或者添加到范围以下的输入中,您也可以计算结果值。对于典型的 char 这个数字是 28 = 256,你得到 130 - 256 = -126.

利用您的数学技能将其转化为通用公式。 ;-)