代码块直接放在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;
}
...以及没有的版本:
#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();
}
答案 0 :(得分:1)
int main(){
intro(); // not void intro()
}
因为您想调用 intro
中的main
函数。如果您对void intro();
进行编码,您只是在main
内声明(请参阅C11§6.7.6.3)intro
函数(然后最好给出其签名) ,例如,写void intro(void);
)。
顺便说一句,您的主要用户必须返回int
。参见C11规范n1570§5.1.2.2.1
还要浏览一些C reference网站。