试图弄清楚C语言的基本原理,这里的一切看起来都可以工作,但不会编译或运行,请让我知道我可以修复

sdnqo3pr  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(127)

尝试创建一个程序来接收2个用户输入(测量长度和单位(cm或in)),以便在英寸和cm之间转换。
例如:如果用户输入1 in,程序将打印“1 in = 2.54 cm”
下面的代码是我写的,但是我不太确定哪里出错了,我一直在网上寻找答案。我知道这可能是一些简单和基本的东西,我错过了,所以请帮助初学者

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

double cm_to_in(int cm) {
    double inches_value = cm/2.54;
    return inches_value;
}   

double in_to_cm(int in) {
    double cm_value = in*2.54;
    return cm_value;
}

double convert(int value, char * unit) {
    if (unit[-2] == 'i' && unit[1] == 'n' && unit[2] == '\0'){
        return in_to_cm(value);
    }
    else if (unit[-2] == 'c' && unit[1] == 'm' && unit[2] == '\0'){
        return cm_to_in(value);
    }
    else {
        exit(-1);
}

char * output_unit(char * unit) {
    if (unit[-2] == 'i' && unit[1] == 'n' && unit[2] == '\0'){
        return "cm";
    }
    if (unit[-2] == 'c' && unit[1] == 'm' && unit[2] == '\0'){
        return "in";
    }
}

int main(int argc, char * argv[]) {
    if (argc < 3) {
        printf("Error: you must enter both a measurement and a unit (cm or in).\n");
    exit(-1);
    }
    int val = atoi(argv[1]);
    char * unit = argv[2];
    converted_val = convert(val, unit);
    output_unit = output_unit(unit);
    printf("%d %c = %d %c\n", val, unit, converted_val, output_unit);
    exit(0);
}

我期待这编译,但它不会。

btxsgosb

btxsgosb1#

  • 不要手动比较字符串,使用string.h中的strcmp。它将比较两个字符串,如果相等则返回0。
  • 您没有声明converted_valoutput_unit的类型。
  • 名称output_unit已使用两次,我已将变量重命名为out_unit
  • 你的牙套有些没合上。
  • 您使用了错误的格式说明符。您应该对字符串使用%s,对浮点数使用%f

修复这些问题后,代码如下所示:

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

double cm_to_in(int cm) {
    double inches_value = cm/2.54;
    return inches_value;
}   

double in_to_cm(int in) {
    double cm_value = in*2.54;
    return cm_value;
}

double convert(int value, char * unit) {
    if (strcmp(unit, "in") == 0){
        return in_to_cm(value);
    }
    else if (strcmp(unit, "cm") == 0){
        return cm_to_in(value);
    }
    else {
        exit(-1);
    }
}

char * output_unit(char * unit) {
    if (strcmp(unit, "in") == 0){
        return "cm";
    }
    if (strcmp(unit, "cm") == 0){
        return "in";
    }
}

int main(int argc, char * argv[]) {
    if (argc < 3) {
        printf("Error: you must enter both a measurement and a unit (cm or in).\n");
        exit(-1);
    }
    int val = atoi(argv[1]);
    char * unit = argv[2];
    double converted_val = convert(val, unit);
    char * out_unit = output_unit(unit);
    printf("%d %s = %f %s\n", val, unit, converted_val, out_unit);
    exit(0);
}

相关问题