C 为什么我的代码块可以在main()中工作,但不能在它自己的函数中工作?

C 为什么我的代码块可以在main()中工作,但不能在它自己的函数中工作?,c,C,当代码块直接放在main()的主体中时,会产生预期的结果,但在拆分为自己的函数并从main()调用时,则不会产生预期的结果 这是我第一次真正尝试C编程。作为练习,我想我应该尝试使用ncurses来获得一个以文本为中心的介绍屏幕。很好,很简单,ncurses做了这个把戏,因为printf没有真正的能力 因此,我认为下一步是将它划分到自己的函数中,作为将其拆分为单独的.c文件的第一步。我认为这将是一种很好的方法,可以通过.h文件中的原型来实践拆分代码和通过头包含引用。嗯,我从来没有走那么远。当代码块

当代码块直接放在main()的主体中时,会产生预期的结果,但在拆分为自己的函数并从main()调用时,则不会产生预期的结果

这是我第一次真正尝试C编程。作为练习,我想我应该尝试使用ncurses来获得一个以文本为中心的介绍屏幕。很好,很简单,ncurses做了这个把戏,因为printf没有真正的能力

因此,我认为下一步是将它划分到自己的函数中,作为将其拆分为单独的.c文件的第一步。我认为这将是一种很好的方法,可以通过.h文件中的原型来实践拆分代码和通过头包含引用。嗯,我从来没有走那么远。当代码块作为自己的函数编译和运行时,它什么也不做

“什么都不做”的意思是,当我运行编译后的程序时,屏幕上什么也不显示,我只是再次得到提示

这是产生正确结果的版本:

#include <ncurses.h>
#include <string.h>

int main()
{

char mesg1[]="Space Tycoon";
char mesg3[]="Press Any Key To Continue";
int row,col;
initscr();
getmaxyx(stdscr,row,col);
mvprintw(row/2-1,(col-strlen(mesg1))/2,"%s",mesg1);                                            
mvprintw(row/2+5,(col-strlen(mesg3))/2,"%s",mesg3);                                            
refresh();                                                                               
getch();
endwin();   

return 0;

}
#包括
#包括
int main()
{
char mesg1[]=“太空大亨”;
char mesg3[]=“按任意键继续”;
int row,col;
initscr();
getmaxyx(stdscr、row、col);
mvprintw(第2-1行,(科斯特伦(mesg1))/2,“%s”,mesg1);
mvprintw(第2行+5行(第3列))/2,“%s”,第3列;
刷新();
getch();
endwin();
返回0;
}
…以及不符合以下条件的版本:

#include <ncurses.h>
#include <string.h>

void intro();

void main()
    {
    void intro();
    }

void intro() 
{
    char mesg1[]="Space Tycoon";
    char mesg3[]="Press Any Key To Continue";
    int row,col;
    initscr();
    getmaxyx(stdscr,row,col);
    mvprintw(row/2-1,(col-strlen(mesg1))/2,"%s",mesg1);                                            
    mvprintw(row/2+5,(col-strlen(mesg3))/2,"%s",mesg3);                                            
    refresh();                                                                               
    getch();
    endwin();
}
#包括
#包括
void intro();
void main()
{
void intro();
}
void intro()
{
char mesg1[]=“太空大亨”;
char mesg3[]=“按任意键继续”;
int row,col;
initscr();
getmaxyx(stdscr、row、col);
mvprintw(第2-1行,(科斯特伦(mesg1))/2,“%s”,mesg1);
mvprintw(第2行+5行(第3列))/2,“%s”,第3列;
刷新();
getch();
endwin();
}
因为您想从
调用
intro
函数。如果您编写
void intro()
您只是在
main
中声明了
intro
函数(然后您最好给出它的签名,例如写入
void intro(void);

顺便说一句,main必须返回
int
。参见C11规范§5.1.2.2.1


还可以查看一些站点。

内部
main()
this
void intro()看起来像您在上面所做的声明
main()
。将其更改为
intro()intro
不需要任何输入参数,因此此
void intro(void)
看起来比
void intro()更合适这就成功了。谢谢。由你决定,但我建议你的代码间隔再大一点(对老年人的眼睛有帮助),例如
char-mesg1[]=“太空大亨”
getmaxyx(stdscr,row,col)等…再次,谢谢。终于知道为什么这样做不起作用感觉很好。请参阅-如果在
return n'
之前到达了结束
'}'
,则默认情况下返回
0
。@DavidC.Rankin,这是关于缺少的
return
语句的。返回类型仍然应该是
int
而不是
void
@Gerhardh对,除非他是在没有操作系统的嵌入式(独立)系统上编码,否则都是在那里定义的实现。看见
int main(){
    intro();  // not void intro()
}