【问题标题】:Type Casting Error in C, When using a function return a char value [closed]C中的类型转换错误,使用函数时返回char值[关闭]
【发布时间】:2021-04-29 05:34:40
【问题描述】:

我是 C 语言的新手。对于我的作业,我编写了这个简单的代码来根据输入的分数打印学生成绩。

main(){

    char grade;
    grade = grade_calc(90);
    printf("Your Grade is ", grade);
}

char grade_calc(int marks){
    if(marks >= 75){
        return "A";
    }
    else {
        return "B";
    }
}

但它在函数起始行(int 标记)中显示错误。

functions.c [Warning] return makes integer from pointer without a cast

谁能帮帮我,为什么会出现这个错误?

【问题讨论】:

  • 你需要给printf你要打印的参数'"Your Grade is %c",grade'
  • "A" 是字符串文字,而不是字符。请改用return 'A';
  • "A"String Literal'A'Character Literal.
  • OT: main(){ 错了……买一本更好的书
  • 而且...printf("Your Grade is ", grade); 缺少有关您要打印的内容的信息。试试printf("Your Grade is %c", grade);

标签: c function type-conversion


【解决方案1】:

应该这样做。

int main(){

    char grade;
    grade = grade_calc(90);
    printf("Your Grade is %c", grade); //%c specify char
    //                    ^^
}

char grade_calc(int marks){
    if(marks >= 75){
        return 'A'; 
        //     ^ ^
    }
    else {
        return 'B';
        //     ^ ^
    }
}

如果您想了解更多信息:C format specifiers。 此外,您的返回类型是冲突的(charchar*)。如果您不知道,"A"char*(字符串)和 'A'char(您可以了解更多关于差异here .最后但同样重要的是,不要忘记 main() 返回 int 并且函数需要在使用前定义。

【讨论】:

  • return "A"; 这是在重复 OP 所犯的相同错误。
  • char grade_calc(int marks);int main()之前也是必须的。
【解决方案2】:

这是 printf 的声明

int printf(const char *format, ...)

printf 接受参数(你在括号中发送给它的内容)并将其打印在屏幕上。

但是,printf 需要知道从哪里打印(也就是您要打印的位)、何时停止以及我们正在讨论哪种格式。

例如: 如果我们采用 int printf 需要知道它在哪里才能看到它的值。 哪个类型它(int)所以 printf 知道在 4 个字节后停止打印。再次是类型(int),因此这些位将表示为数字而不是字符或浮点数

每种类型都有它的通配符: %d 为 int %c 代表字符 %s 用于字符串 %f 表示浮动

你可以查一下

你还需要从函数中返回一个字符 所以你需要返回这个:

 return('a'); and not return ("a");

所以,

 "a" 

表示字符串文字,因此函数返回char * 而不是char

  'a' 

表示字符 a 的值

【讨论】:

  • 同样重要的是要注意,以帮助理解错误消息,C 中的“字符串文字”实际上是一个指针,一个指向内存中字符串的指针,而 char 实际上是整数类型,8位整数。
  • 我写的means string literal so the function returns 'char *' and not 'char'.
  • 是的,你做了@AsafItach...我只是澄清一下,因为新手可能不明白星号的含义。
猜你喜欢
  • 2016-04-15
  • 1970-01-01
  • 2023-01-25
  • 2021-07-17
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多