Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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(基本上没有任何编程语言方面的经验),现在我对在头文件中使用的一些函数的原型设计有一些问题 为了学习,我只使用库,只使用printf和scanf函数,现在它只打印到控制台 我能够为我的菜单编写一个工作原型函数,它只使用printf函数,但是scanf给了我更多的问题,它只是拒绝编译,我很难看到我的思维错误在哪里 我的主要节目: #include "menu.h" #include "circlefunctions.h" #include "input.h" int main

所以我试图自己学习c(基本上没有任何编程语言方面的经验),现在我对在头文件中使用的一些函数的原型设计有一些问题

为了学习,我只使用库,只使用printf和scanf函数,现在它只打印到控制台

我能够为我的菜单编写一个工作原型函数,它只使用printf函数,但是scanf给了我更多的问题,它只是拒绝编译,我很难看到我的思维错误在哪里

我的主要节目:

#include "menu.h"
#include "circlefunctions.h"
#include "input.h"

int main(void){

    float diameter;
    double straal;
    double oppervlakte;
    double omtrek;


        while(1){

            menu();
            user_input();
            system("cls");

        switch(user_input())
        {

    case 1:

        printf(" ----------------------------------------\n");
        printf(" Typ de diameter van de cirkel: ");
        scanf("%g", &diameter);
        printf(" ----------------------------------------\n");

        straal = diameter / 2;
        oppervlakte = PI * (straal * straal);
        omtrek = 2 * PI * straal;

        printf(" De straal = %f \n\n", straal  );
        printf(" De oppervlakte = %f \n\n" , oppervlakte);
        printf(" De omtrek = %f \n" , omtrek);
        printf(" ----------------------------------------\n");

        break;

    case 2:
        return(0);

    case 3:
        return(0);

    case 9:
        return(0);

    case 0:
        return(0);
        }
    }
 return 0;
}
顽固的头球:

#include <stdio.h>

void user_input();

    void user_input(){
        scanf("%d", &user_input);
  }
#包括
无效用户输入();
无效用户_输入(){
scanf(“%d”和用户输入);
}
我在尝试编译时遇到的错误在input.h中 有缺陷的部分;scanf(“%d”和用户输入)

错误代码:格式“%d”要求参数类型为“int”,但参数2的类型为“void()()”。 我在主程序的开关上也得到了一个错误,开关量不是整数。我怀疑此错误与此相关,但不确定。我仍然需要调试该部分,但如果有人愿意为我提供正确的文档,我将不胜感激

我的第二个问题也与标题有关:我已经在“menu.h”中包含了。我需要在“input.h”中再次包含它吗? (如果我正确理解了预处理器的工作原理,我就不必包括它,但不幸的是,我找不到任何地方可以用简单的术语解释它。)

编辑:

感谢大家提供宝贵的信息

@谢谢你的例子。我希望你不介意我再问一些

我已经在“input.h”中用您的代码替换了我的代码,现在它将编译并运行。然而,这种行为已经改变了。由于某些不清楚的原因,我现在必须在程序接受我的输入之前输入两次选项。因此,第一个输入在输入后被忽略,它将只接受第二个输入

你能告诉我这个错误的原因吗?或者让我看一些文档,其中解释了这一点?当然,我不想占用你们太多宝贵的时间

编辑2

谢谢你的回复和信息。我把bug弄出来了,它正在按预期工作(我真傻,没有看到)。 其他人回答说:我当然会接受你的信息,并从中学习。谢谢大家!

user\u input()
不会返回任何内容,因为它声明为
void

但是您试图使用不存在的返回值:
开关(user\u input())

这会导致未定义的行为


此外,这:

scanf("%d", &user_input);
尝试从
stdin
读取
int
,并将其存储在
user\u input
函数的内存地址中。这不是个好主意。同样,未定义的行为


您可能希望函数看起来像什么:

int user_input(){
    int number; // store user input to this variable
    scanf("%d", &number);
    return number; // return the user input so that it can be used outside the function
}
user\u input()
不会返回任何内容,因为它声明为
void

但是您试图使用不存在的返回值:
开关(user\u input())

这会导致未定义的行为


此外,这:

scanf("%d", &user_input);
尝试从
stdin
读取
int
,并将其存储在
user\u input
函数的内存地址中。这不是个好主意。同样,未定义的行为


您可能希望函数看起来像什么:

int user_input(){
    int number; // store user input to this variable
    scanf("%d", &number);
    return number; // return the user input so that it can be used outside the function
}

如果在以前的头文件中声明了头文件。您不需要在后续包含的头文件中再次包含它。出于这个原因,我倾向于不在本地*.h文件中包含头文件。如果您尽可能多地在.c文件中声明include,则可以避免循环include

scanf函数的第二个参数是void()类型的函数,void()。这意味着它不接受任何参数,不返回任何内容或“void”。我想你希望你的用户输入是一个“double”类型的变量,它被填充在某个地方,可能是通过控制台的一些用户输入,使用stdin调用“get”


HTH

如果在以前的头文件中声明了头文件。您不需要在后续包含的头文件中再次包含它。出于这个原因,我倾向于不在本地*.h文件中包含头文件。如果您尽可能多地在.c文件中声明include,则可以避免循环include

scanf函数的第二个参数是void()类型的函数,void()。这意味着它不接受任何参数,不返回任何内容或“void”。我想你希望你的用户输入是一个“double”类型的变量,它被填充在某个地方,可能是通过控制台的一些用户输入,使用stdin调用“get”


HTH

关于
用户输入()
。首先,头文件中不应该有可执行代码。另一方面,您正在尝试使用函数本身的地址,而不是提供函数参数..关于
user\u input()
。首先,头文件中不应该有可执行代码。另一方面,您正在尝试使用函数本身的地址,而不是提供函数参数。感谢您的帮助,我已经回复了我自己的线程,而不是对您的评论进行评论。所以我希望你能看到我的帖子。@user2645886是的,你真的不应该这么做。我将你的帖子作为编辑添加到你的问题中。谢谢你的帮助,我已经回复了我自己的帖子,而不是对你的评论发表评论。所以我希望你能看到我的帖子。@user2645886是的,你真的不应该这么做。我将你的帖子作为编辑添加到你的问题中。