-1

助けてください...テキスト ファイルから 2 つの文字列を読み取り、それらを 2 つの別々の配列に格納する必要があります。検索して多くのコードを取得しましたが、そのうちの 1 つが機能したので、2 つの文字列を読み取るように変更しようとしました。これが私のコードです:

int main(){
int i = 0;
int BUFSIZE = 1000;
char* words[20];
char* words2[20];
FILE *fp = fopen("input1.txt", "r");
FILE *fp2 = fopen("input2.txt", "r");
if (fp == 0){
    fprintf(stderr, "Error while opening");
    return 0;
}
words[i] = (char*)malloc(BUFSIZE);
words2[i] = (char*)malloc(BUFSIZE);
while (fgets(words[i], BUFSIZE, fp)) {
    i++;
    words[i] = (char*)malloc(BUFSIZE);
} 
while (fgets(words2[i], BUFSIZE, fp2)) {
    i++;
    words2[i] = (char*)malloc(BUFSIZE);
} 
printf("Output: \n");
srand(time(NULL));
int j = rand()%i;
int k = (j+1)%i;
fflush(stdout);
printf("%d - %s %d -%s", j, words[j], k, words[k]); 

int x;
for(x = 0; x<i; x++)
   free(words[x]);
   free(words2[x]);
scanf("%d", x);
fclose(fp);
fclose(fp2);
return 0;
}

しかし、それは機能しません。誰もが理由を知っていますか? ありがとうございました!

4

2 に答える 2

2

2 番目のループの前に i = 0 をリセットし、free(x) コードを中括弧で囲みます。

int main()
{
    int i = 0;
    int BUFSIZE = 1000;
    char* words[20];
    char* words2[20];
    FILE *fp = fopen("input1.txt", "r");
    FILE *fp2 = fopen("input2.txt", "r");
    if (fp == 0){
        fprintf(stderr, "Error while opening");
        return 0;
    }
    words[i] = (char*)malloc(BUFSIZE);
    words2[i] = (char*)malloc(BUFSIZE);
    while (fgets(words[i], BUFSIZE, fp)) {
        i++;
        words[i] = (char*)malloc(BUFSIZE);
    } 

    // reset i back to zero
    i = 0; 
    while (fgets(words2[i], BUFSIZE, fp2)) {
        i++;
        words2[i] = (char*)malloc(BUFSIZE);
    } 

    printf("Output: \n");
    srand(time(NULL));
    int j = rand()%i;
    int k = (j+1)%i;
    fflush(stdout);
    printf("%d - %s %d -%s", j, words[j], k, words[k]); 

    int x;
    for(x = 0; x<i; x++){
       free(words[x]);
       free(words2[x]);
    }
    scanf("%d", x);
    fclose(fp);
    fclose(fp2);
    return 0;
}
于 2012-11-10T01:14:13.433 に答える
0

何が起こっているのかについて、より多くの情報が必要です。コンパイル エラー、実行時メッセージは表示されますか? ファイルが存在することを確認しましたか?

また、いくつか修正する必要があります。

  1. 最初の行に stdio.h を含める必要があります

  2. for() の本体に中かっこを追加して、free への両方の呼び出しを囲みます。

  3. あなたのコンパイラは、そのような関数の途中で x の宣言を受け入れますか? そうでない場合は、一番上に移動します。

于 2012-11-10T01:10:43.250 に答える