0

配列を作成しようとして問題が発生し、配列から最初の 10 個の要素を出力しようとしています...これは私がこれまでに持っているものです:

#include <stdio.h>

int main()

{
    char term[200][40];
    FILE *ifp;
    int i;
    ifp = fopen("terms.txt", "r");

    if (ifp == NULL){
    fprintf(stderr, "Could not open file...\n");
    }

    fgets(term, 40, ifp);

    for(i = 1; i < 11; i++) {
    printf("%s", term[i-1]);
    }
}

また、コンパイラは私にエラーを与えます:

4

4 に答える 4

1
fgets(term, 40, ifp); //THIS IS WRONG

for ループを変更し、上記のステートメントを削除します

for(i = 1; i < 11 && fgets(term[i-1], 40, ifp)!=NULL ;i++) {
printf("%s", term[i-1]);
}
于 2013-10-05T22:39:43.717 に答える
0
char term[200][40];

40 文字を保持できる 200 個の文字列バッファーの配列です。

fgets(term, 40, ifp);

ファイルから文字列を読み取り、それを最初の引数が指すバッファに格納しようとします (期待char*)。

次のように読んでみてください。

int i = 0;
while (fgets(&term[i++][0], 40, ifp);

fgetsNULL失敗すると戻り、停止します。

于 2013-10-05T22:40:00.963 に答える
0

これtermは、配列が関数に渡されると、その最初の要素へのポインターとして扱われるためです。
term の最初の要素は... 40 文字の配列なので、

char (*)[40]

fgets、そしてそれは期待しています

char *

.
ところで、あなたの編集者は私よりも前にまったく同じことをあなたに言いました。

于 2013-10-05T22:44:18.957 に答える
0
 fgets(term, 40, ifp);

        for(i = 1; i < 11; i++) {
        printf("%s", term[i-1]);
        }

上記のコードでは、1 つの文字列を読み取っifpて格納しtermますが、10 個の文字列を読み取ろうとすると、term が初期化されていないため、何が出力されるかわかりません。

于 2013-10-05T22:45:09.433 に答える