c中的函数原型,编译错误
所以我试图自己学习c(基本上没有任何编程语言方面的经验),现在我对在头文件中使用的一些函数的原型设计有一些问题 为了学习,我只使用c中的函数原型,编译错误,c,C,所以我试图自己学习c(基本上没有任何编程语言方面的经验),现在我对在头文件中使用的一些函数的原型设计有一些问题 为了学习,我只使用库,只使用printf和scanf函数,现在它只打印到控制台 我能够为我的菜单编写一个工作原型函数,它只使用printf函数,但是scanf给了我更多的问题,它只是拒绝编译,我很难看到我的思维错误在哪里 我的主要节目: #include "menu.h" #include "circlefunctions.h" #include "input.h" int main
#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”中包含了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是的,你真的不应该这么做。我将你的帖子作为编辑添加到你的问题中。