求教 C程序设计语言 上一例题
两段程序,同是输入多行字符后,输出字符数最多的那一行,区别只在于第二种方法用到了 extern 全局变量,为什么第一种能够正确输出结果,而第二种却不输出任何结果,苦恼ing。程序代码:
#include <stdio.h> #include <stdlib.h> #define MAXLINE 1000 int getline(char line [],int maxline); void copy(char to [],char from []); int main() { int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max=0; while ( (len=getline(line, MAXLINE))>0 ) if (len>max) { max=len; copy(longest, line); } if (max>0) printf ("%s",longest); system("PAUSE"); return 0; } int getline(char s[], int lim) { int c,i; for (i=0; i<lim-1 && (c=getchar()) != EOF && c!='\n' ; ++i) s[i]=c; if (c=='\n') { s[i]=c; ++i; } s[i]='\0'; return i; } void copy (char to[], char from[]) { int i; i=0; while ( (to[i]=from[i])!='\0' ) ++i; }
第二种
程序代码:
#include <stdio.h> #include <conio.h> #define MAXLINE 1000 int max; char longest[MAXLINE]; char line[MAXLINE]; int getline(void); void copy(void); main() { int len; extern int max; extern char longest[]; max=0; while ((len=getline())>0) if (len>max) { max=len; copy(); } if (max>0) printf ("%s",longest); system("PAUSE"); return 0; } int getline(void) { int c,i; extern char line[]; for (i=0;i<MAXLINE-1 && (c=getchar()) != EOF && c!='\n'; ++i) if (c == '\n') { line[i] = c; ++i; } line[i]='\0'; return i; } void copy(void) { int i; extern char line[],longest[]; i=0; while ((longest[i]=line[i]) != '\0') ++i; }