如果C中的/ Else语句不起作用

时间:2017-09-29 08:10:05

标签: c if-statement

在课堂上学习一个基础计算机科学项目,并坚持这个问题。我在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;
}

2 个答案:

答案 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的值可能与积分结果略有不同。像我一样改变操作数的顺序可以提高某些计算结果的准确性。