为什么我的代码块不能在main()中工作,而不能在自己的函数中工作?

时间:2018-12-30 09:13:23

标签: 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;

}

...以及没有的版本:

#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();
}

1 个答案:

答案 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网站。