C语言 为什么if语句后面有新条目

koaltpgm  于 2023-01-04  发布在  其他
关注(0)|答案(2)|浏览(112)
#include <stdio.h>
#include <math.h>

int main(){
    float radius;
    float keliling;
    float luas;
    const float PI = 3.14;
    char choice;
    luas = 0;
    keliling = 0;
    
    printf("Luas or Keliling :\n");
    scanf("%s", &choice);

    if(choice = luas){
        printf("Enter radius :\n");
        scanf("%f", &radius);
        keliling = 2 * PI * radius;
        luas = PI * pow(radius, 2);
        printf("Luas lingkaran adalah : %.2f\n", luas);
        
    }
    else if(choice = keliling){
        printf("Enter radius :\n");
        scanf("%f", &radius);
        keliling = 2 * PI * radius;
        luas = PI * pow(radius, 2);
        printf("Keliling lingkaran adalah : %.2f\n", keliling);
    }

    return 0;

}

当我运行代码时,代码转到if语句,用于选择beetwen luas和keliling,我选择luas,但在我选择luas之后,有一个新条目,无论我用什么词填充该条目,它都会变成“blablabla未被识别为内部或外部命令,可操作程序或批处理文件”。
尝试查找错误并修复代码

iklwldmw

iklwldmw1#

分配与比较:

if(choice = luas)

这将用float类型的luas初始化choice类型的char
=用于赋值,==用于比较。也就是说,你不能用==比较字符串,使用标准的strcmp==只比较指针值。

格式说明符不正确:

scanf("%s", &choice);

choice被声明为char类型。char的正确格式说明符是%c。但是,您希望用户输入一个字符串,因此scanf将读取一个char,并在输入缓冲区中留下尾随的垃圾,它可能会被后续的输入函数调用自动读取。而且永远不会提示您输入。

00jrzges

00jrzges2#

代码中的问题是luas和keiling是浮点数,而你试图将它们与字符串进行比较,就像@Haris提到的那样。
=是赋值。你应该使用==来比较。无论如何,如果你愿意,你也可以使用switch(choice)
你也应该把半径扫描从if条件中去掉。同样在下面的代码中,luas的选择是0,keliling是1。在枚举中,如果值没有明确提到,它从0开始
代码的工作版本如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define PI 3.14

enum Choice {
    luas, /* Area of a circle  */   /* luas = 0 */
    keliling /* circumference of a circle */ /* keliling = 1 */
};

int main ( void ) {
    float radius;
    double result;
    int choice;

    printf("Luas or Keliling :\n");
    scanf("%d", &choice);
    printf("Enter radius :\n");
    scanf("%f", &radius);

    switch(choice) {
        case luas:
        result = PI * pow(radius, 2);
        printf("Luas lingkaran adalah : %.2f\n", result);
        break;

        case keliling:
        result = 2 * PI * radius;
        printf("Keliling lingkaran adalah : %.2f\n", result);
        break;
    }

    return 0;
}

相关问题