Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么可以';函数中是否有字符返回?_C - Fatal编程技术网

C 为什么可以';函数中是否有字符返回?

C 为什么可以';函数中是否有字符返回?,c,C,我有这个程序,它给了我这个错误,你能解释为什么吗?我是c语言的新手,想了解它是如何工作的 代码 错误 在声明main之前,您需要声明search,如果您在main()下面声明函数并希望在那里使用它们,您应该告诉编译器该函数存在,这意味着您的代码是: #include "stdio.h" char search(int number); // that is the line your code was missing before int main(void) { int calif

我有这个程序,它给了我这个错误,你能解释为什么吗?我是c语言的新手,想了解它是如何工作的

代码 错误
在声明
main

之前,您需要声明
search
,如果您在
main()
下面声明函数并希望在那里使用它们,您应该告诉编译器该函数存在,这意味着您的代码是:

#include "stdio.h"

char search(int number); // that is the line your code was missing before

int main(void)
{
    int calification;
    printf("write a number: ");
    scanf("%d", &calification);
    printf("the calification is %c", search(calification));
}

char search(int number) { ... }

scanf中还有一个小问题,我已经解决了。如果输入的类型为
int
,则需要使用
%d
而不是
%c
读取值,后者用于
字符
。如果没有它,
搜索(数字)
会将
数字
与ASCII值进行比较-这意味着对于输入1、2、3、4,返回的值将是
'n'
,而不是
'a'
,…,
'd'
首先必须定义函数,然后才能调用函数。为此,必须将函数置于main()之上:


main()
之前添加函数原型声明,以便在
main
中正确执行调用:
char search(int number)
再次阅读
scanf
的文档,并打开编译器警告,以便编译器可以帮助查找您的bug。在使用
搜索
函数之前,您需要告诉编译器它的外观,否则编译器会假定它返回
int
。您可以将定义放在
main
之前,或者(可能更好)将其向前声明(放在
main
之前),如下所示:
char search(int number)(单独一行)。这是否回答了您的问题?关于:
#包括“stdio.h”
头文件:
stdio.h
是一个系统头文件,因此应包含在:
中。您创建的头文件(即非系统头文件)应包含在“`myheader.h”中,关于:
void main()
,根据C标准,这不是
main()
的有效签名,非常感谢!为什么会发生这种情况?为什么我必须在main之前键入search?我问为什么我想了解c是如何工作的最简单的答案是编译器不知道这样的
search(int)
函数存在。如果您在
main
的正文中提到它,那么当您尝试在程序中的某个地方调用该函数时,它会查找该模式。非常感谢!为什么会发生这种情况?为什么我必须在main之前键入search?我问为什么我想了解c是如何工作的非常感谢!为什么会发生这种情况?为什么我必须在main之前键入search?我问为什么我想了解cworks@Jos编译器正在自上而下地评估这个文档
main
必须至少知道
search
的签名才能使用
search
。这就是为什么@Eric纠正了我。您可以在以后的代码中为
search
布局所有详细信息,但如果您打算使用它,至少必须提前声明签名。因此,您可以将
search
的整个定义移动到
main
上方,或者只需放置
char search(int number)位于
主菜单的上方
,将
搜索的肉和土豆留在下方,即它们当前所在的位置。
exercise3.c:11:6: error: conflicting types for 'search'
char search(int number)
     ^
exercise3.c:8:38: note: previous implicit declaration is here
    printf("the calification is %c", search(calification));
#include "stdio.h"

char search(int number); // that is the line your code was missing before

int main(void)
{
    int calification;
    printf("write a number: ");
    scanf("%d", &calification);
    printf("the calification is %c", search(calification));
}

char search(int number) { ... }
#include "stdio.h"

char search(int number)
{
    if (number == 1)
        return ('a');
    else if (number == 2)
        return ('b');
    else if (number == 3)
        return ('c');
    else if (number == 4)
        return ('d');
    else
        return 'n';
}

main()
{
    int calification;
    printf("write a number: ");
    scanf("%c", &calification);
    printf("the calification is %c", search(calification));
}