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