2011-12-20 40 views
1

我想学习一些C语言,并选择使用本书“SAMS在21天内自学C”。 (顺便说一句,有什么好的C书?这是我的第三本书!我总是会得到坏的或破碎的代码,它应该在我的学习过程中发挥作用,并在它不存在的时候撞到墙上!:-() 。 可悲的是,我在这下面的代码,我只是要输入和运行运行打字很顺利,但运行......嗯,不是那么好 编译器给了我这行错误:Error_handler ...什么?

{ 
printf ("Printer busy or disconnected\n"); error_handler; } 

,当我尝试运行此代码,因为我非常新手,当涉及到C代码,我不知道在所有做什么,当编辑器返回错误信息是这样的:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .clean-conf 
rm -f -r build/Debug 
rm -f dist/Debug/GNU-MacOSX/type_and_run 

CLEAN SUCCESSFUL (total time: 158ms) 
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/type_and_run 
mkdir -p build/Debug/GNU-MacOSX 
rm -f build/Debug/GNU-MacOSX/Type and run 1.o.d 
gcc -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/Type and run 1.o.d -o build/Debug 
/GNU-MacOSX/Type\ and\ run\ 1.o Type\ and\ run\ 1.c 
i686-apple-darwin10-gcc-4.2.1: and: No such file or directory 
i686-apple-darwin10-gcc-4.2.1: run: No such file or directory 
i686-apple-darwin10-gcc-4.2.1: 1.o.d: No such file or directory 
Type and run 1.c: In function 'do_heading': 
Type and run 1.c:54: error: 'error_handler' undeclared (first use in this function) 
Type and run 1.c:54: error: (Each undeclared identifier is reported only once 
Type and run 1.c:54: error: for each function it appears in.) 
make[2]: *** [build/Debug/GNU-MacOSX/Type and run 1.o] Error 1 
make[1]: *** [.build-conf] Error 2 
make: *** [.build-impl] Error 2 

BUILD FAILED (exit value 2, total time: 158ms) 

我能理解的是“error_handler”未声明,并且它似乎不是库函数。叹!


所以说简而言之,有什么我可以做的修改代码,以便它可以按预期工作,我可以继续前进?

或者我应该把这本书放在一堆关于C的无用书中?

这里是它的全长代码:

void do_heading(char *filename); 

int line = 0, page = 0; 

int main(int argv, char *argc[]) 

{ 
    char buffer[256]; 
    FILE *fp; 

    if (argv < 2) 
    { 
     fprintf(stderr, "\nProper Usage is: "); 
     fprintf(stderr, "\n\nprint_it filename.ext\n"); 
     return (1); 
    } 

    if ((fp = fopen(argc[1], "r")) == NULL) 
    { 
     fprintf(stderr, "Error opening file, %s!", argc[1]); 
     return (1); 
    } 

    page = 0; 
    line = 1; 
    do_heading(argc[1]); 

    while(fgets(buffer, 256, fp) != NULL) 
    { 
     if(line % 55 == 0) 
      do_heading(argc[1]); 

     fprintf(stdout , "%4d:\t%s", line++, buffer); 
    } 

    fprintf(stdout , "\f"); 
    fclose(fp); 
    return 0; 
} 

void do_heading(char *filename) 
{ 
    page++; 

    if (page > 1) 
     fprintf(stdout , "\f"); 

    fprintf(stdout, "Page: %d, %s\n\n", page, filename); 

    if ((stdout = fopen("PRT:","w")) == NULL) { 
    printf ("Printer busy or disconnected\n"); error_handler; } 

} 
+3

“int argv”and“char * argc []”..really?!!! – 2011-12-20 17:17:41

+0

这本书说的是什么! :-S – 2011-12-20 17:19:28

+0

但是没有其他的代码没有问题,除了这一行: { printf(“Printer busy or disconnected \ n”); error_handler; } – 2011-12-20 17:20:35

回答

0

试试这本书:

C程序设计语言(第2版)由Brian W. Kernighan的,丹尼斯·里奇米。

你有argv和argc交换。

if (argv 1) 

应该是:

if (argc == 1) 

你可以简单地删除error_handler块,因为它似乎起不到任何作用,并在代码中没有声明。这本书很可能试图告诉你的是,为什么可能会陷入僵局?

+0

argc&argv只是参数名称,只要它的'int main(int,char **)'就可以。 'if(argv == 1)'在这种情况下应该做得很好 – 2011-12-20 17:41:31

+2

是的,声明'int main(int argv,char * argc [])'是完全合法的。但是阅读它会让我的眼睛流血。 – 2011-12-20 19:07:25

0

所以编译器输出可能看起来很吓人,但作为一个初学者,你关心的一点通常是英语。这个例子也不例外:

Type and run 1.c: In function 'do_heading': 
Type and run 1.c:54: error: 'error_handler' undeclared (first use in this function) 
Type and run 1.c:54: error: (Each undeclared identifier is reported only once 
Type and run 1.c:54: error: for each function it appears in.) 

这是告诉你,error_handler未申报。它在您的程序中看起来没有其他地方,所以您无法在此使用它。让我们来看看行:

if ((stdout = fopen("PRT:","w")) == NULL) { 
    printf ("Printer busy or disconnected\n"); error_handler; } 

你应该知道,分号指示语句的结束的一种方式和好的做法是把只有一条语句上线。分手:

if ((stdout = fopen("PRT:","w")) == NULL) { 
    printf ("Printer busy or disconnected\n"); 
    error_handler; 
} 

现在很明显:你只是说error_handler;;它没有做任何事情,它不是一个函数调用(没有括号),也不是一个你指定或读取的变量,所以这显然是一个巨大的错误。删除它并重试。顺便说一句,如果线条出现在书中,就像你在这里放置的那样 - 在一行中有两个分号 - 那么是的,你应该把它扔在火上。阅读Kernighan和Ritchie的“C语言程序设计语言”,并进行所有练习 - 您会惊讶于从无所事事到准备在真正的程序中工作的速度。

+0

嗨,大家好吧 昨天还有其他事情要做,但我肯定会回到你身边!祝大家圣诞快乐! – 2011-12-21 12:55:28