P36にある”一番長い行をプリントするプログラム”について、
15行目のmax = 0;を3行上に移す(int max;とchar line[MAXLINE];の間に挿入する)と以下のエラーが発生してしまいます。
↑の行為の何が駄目なのかさっぱりわかりません、どなたか教えていただけないでしょうか?
環境はvisual studio 2010です。
\sample1-9.c(12): error C2143: 構文エラー : ';' が '型' の前にありません。
\sample1-9.c(13): error C2143: 構文エラー : ';' が '型' の前にありません。
\sample1-9.c(15): error C2065: 'line' : 定義されていない識別子です。
\sample1-9.c(15): warning C4047: '関数' : 間接参照のレベルが 'char *' と 'int' で異なっています。
\sample1-9.c(15): warning C4024: 'getline' : の型が 1 の仮引数および実引数と異なります。
\sample1-9.c(18): error C2065: 'longest' : 定義されていない識別子です。
\sample1-9.c(18): warning C4047: '関数' : 間接参照のレベルが 'char *' と 'int' で異なっています。
\sample1-9.c(18): warning C4024: 'copy' : の型が 1 の仮引数および実引数と異なります。
\sample1-9.c(18): error C2065: 'line' : 定義されていない識別子です。
\sample1-9.c(18): warning C4047: '関数' : 間接参照のレベルが 'char *' と 'int' で異なっています。
\sample1-9.c(18): warning C4024: 'copy' : の型が 2 の仮引数および実引数と異なります。
\sample1-9.c(21): error C2065: 'longest' : 定義されていない識別子です。
1>
1>ビルドに失敗しました。
#include <stdio.h>
#define MAXLINE 1000
/* getline関数の宣言 */
int getline(char line[], int maxline);
/* copy関数の宣言 */
void copy(char to[], char from[]);
main(){ /* copy関数で格納した最大文字数の配列の中身を印字 */
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);
return 0;
}
/* getline関数の定義 */
int getline(char s[], int lim){ /* 配列(引数)内の文字数(戻り値)を調べて返す */
int i,c;
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;
}
/* copy関数の定義 */
void copy(char to[], char from[]){ /* 文字数最大値を更新した文字列from[]をto[]にcopy */
int i; /* iはfor用 */
i = 0;
while((to[i] = from[i]) != '\0'){
++i;
}
}