在 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.
利用您的数学技能将其转化为通用公式。 ;-)
你好我正在学习 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.
利用您的数学技能将其转化为通用公式。 ;-)