在课堂上学习一个基础计算机科学项目,并坚持这个问题。我在Java方面经验丰富,但我刚刚开始使用C语言。它似乎只是跳过我的if / else语句,好像它不在那里,有人可以帮我理解这个吗?
#include <stdio.h>
int main()
{
//Systems Programming: Project3 - Justus Milhon
//Requests User Input
printf("Enter temparature in Farenheit (int up to 3 digits): ");
//Names and scans in Farenheit value
float fare;
scanf("%f", &fare);
//Declares and calculates Celcius value
float celc;
celc = 5.0 / 9.0 * ( fare - 32 );
//Determines approptiate description (if/else system)
char desc[50] = "if statement is not running :( ";
if(fare == -40){
char desc[50] = "Ouch! Cold either way!!";
}
else if(fare == 32){
char desc[50] = "Freezing point of water";
}
else if(fare == 70){
char desc[50] = "Room temperature";
}
else if(fare == 99){
char desc[50] = "Average body temperature";
}
else if(fare == 212){
char desc[50] = "Boiling point of water";
}
else{
char desc[50] = "final else stetement is being used :(";
}
//Prints output
printf("Farenheit Celsius Description\n----------
---------- ----------\n%.0f %.3f
%s\n", fare, celc, desc);
return 0;
}
答案 0 :(得分:3)
此:
if(fare == -40){
char desc[50] = "Ouch! Cold either way!!";
}
打开一个新的范围,使用一个名为desc
的新局部变量,即&#34;阴影&#34;周围范围内的一个。此变量初始化为字符串,然后在范围退出时丢弃。永远不会触及父作用域中同名的变量。
你需要:
#include <string.h>
在顶部,然后将所有if
更改为如下所示:
if(fare == -40){
strcpy(desc, "Ouch! Cold either way!!");
}
这使用标准strcpy()
函数将新字符串写入父作用域中的单个desc
变量。
此外,你永远不会看celc
,这在计算它之后似乎令人困惑,而对float
的精确比较是一个坏主意。
答案 1 :(得分:0)
您的代码只定义了具有相同名称的不同数组,并且范围仅限于定义它们的块。您应该使用指针并将其指定为正确的字符串:
#include <stdio.h>
int main(void) {
//Systems Programming: Project3 - Justus Milhon
//Requests User Input
printf("Enter temperature in Farenheit (int up to 3 digits): ");
//Names and scans in Farenheit value
float fare;
scanf("%f", &fare);
//Declares and calculates Celcius value
float celc;
celc = 5.0 * (fare - 32) / 9.0;
//Determines appropriate description (if/else system)
const char *char = "if statement is not running :( ";
if (fare == -40) {
desc = "Ouch! Cold either way!!";
} else
if (fare == 32) {
desc = "Freezing point of water";
} else
if (fare == 70) {
desc = "Room temperature";
} else
if (fare == 99) {
desc = "Average body temperature";
} else
if (fare == 212) {
desc = "Boiling point of water";
} else {
desc = "final else statement is being used :(";
}
//Prints output
printf("Farenheit Celsius Description\n"
"--------- ------- -----------\n"
"%9.0f %7.3f %s\n",
fare, celc, desc);
return 0;
}
但请注意,浮点运算不是以绝对精度执行的:5.0 / 9.0
是近似值,因此计算到celc
的值可能与积分结果略有不同。像我一样改变操作数的顺序可以提高某些计算结果的准确性。