2012-01-09 19 views
0

私は3単語の単語ファイルを持っています。私は各単語を配列に読み込む必要があります。私はfscanf()でこれをやろうとしましたが、うまくいきません。私は間違って何をしていますか?私がコンパイルしようとするとfscanfが期待どおりに動作しません。

#include <stdio.h> 

void main(){ 
    char words_array[80]; 
    FILE *dictionary; 
    dictionary = fopen("dictionary.txt", "r"); 
    fscanf (dictionary, "%s", words_array); 
    printf("The content of words_array is: %s, %s, %s, \n", words_array[0], words_array[1], words_array[2]); 
} 

は、私は次のエラーを取得する:

警告:フォーマット '%s' は '*シャア型の引数を期待していますが、引数は "int型

を入力しています次のように

dictionary.txtファイルには、次のとおりです。すべての

apple 
orange 
bananna 

ありがとう!

+0

'fscanf'または' printf'に関する警告はありますか? 'printf'の使い方は意味をなさない。そして、あなたが 'fscanf'がやるべきことをあなたが期待しているかどうかは分かりませんが、マニュアルを読むべきだと思います。 – ugoren

+0

ファイル全体を単一のchar *(文字列)に読み込みます。strtok()は、新しい行を探して別の配列に文字列を変換します。あるいは、fgets()を調べてください。これは、word_arrayを2次元にすると、あなたが望むことができます。 –

+0

あなたの基準に合致しない回答を受け入れるのはなぜですか? '私は各単語を配列に読み込む必要があります。 ' – KevinDTimm

答えて

2

dictionary.txtの1行に1つの単語(フルーツ)が含まれていることを前提とします(< 80文字)。

#include <stdio.h> 

int main(void) 
{ 
    char words_array[80]; 
    FILE *dictionary; 
    dictionary = fopen("dictionary.txt", "r"); 
    while (fscanf (dictionary, "%s", words_array) == 1) { 
     printf("%s \n", words_array); 
    } 

    return 0; 
} 

出力:


$ gcc fsca.c 
$ ./a.out 
apple 
orange 
bananna 
$ cat fsca.c 
はOPの作者からの要求ごとのような代替的な答えを追加します。

#include <stdio.h> 

int main(void) 
{ 
    char word1[80], word2[80], word3[80]; 
    FILE *dictionary; 
    dictionary = fopen("dictionary.txt", "r"); 
    fscanf(dictionary, "%s", word1); 
    fscanf(dictionary, "%s", word2); 
    fscanf(dictionary, "%s", word3); 
    printf("%s %s %s\n", word1, word2, word3); 

    return 0; 
} 

出力

$ gcc fsca.c 
$ ./a.out 
apple orange bananna 
$ 
+0

私がしたいことは、配列内の別の文字列に各単語を読み込むことです。どのように私はこれを行うことについて行くかもしれない任意のアイデア? –

+0

@ Number7evenはい、可能です、私の答えを確認してください。私は新しい答えでそれを更新しました。それが役に立てば幸い! ..ありがとう! ;) –

+0

@ Number7even私の答えが満足できるとわかったら、隣のチェックマークをクリックして同じことを確認してください。ありがとう! –

1

あなたの変数words_arrayは80文字のためのスペースがあります。あなたは間違って80単語あると思っています。最初の単語を印刷するprintfのラインは次のとおりです。

printf("The content of words_array is: %s\n", words_array); 

あなたはすべての行/単語を印刷したい場合は、ファイルの行の読者でこれをラップする必要があります:

while (fscanf (dictionary, "%s", words_array)) { 
     printf("%s \n", words_array); 
    } 

なぜfscanfのマニュアルページを読んでください。

代わりにwhileループの[編集]

char words_array[3][80]; 
for (int i = 0; i < 3; i++) 
    fscanf(dictionary, "%s", words_array[i]); 

[/編集]

+0

私がしたいことは、各単語を配列内の別の文字列に読み込むことです。どのように私はこれを行うことについて行くかもしれない任意のアイデア? –

+0

上記の編集を参照してください – KevinDTimm

1

チャーwords_array [80]は、単に文字列である - は、文字列の配列。

words_array [0]などを印刷しようとすると、それらは文字なので、%sとの不一致です。

また、ファイルの最後まで読むためにfeofを使用したいと考えています。ファイルの終わりに達するまでfscanfを使い、文字列を読んで印刷してください。

+0

私がしたいことは、各単語を配列内の別の文字列に読み込むことです。どのように私はこれを行うことについて行くかもしれない任意のアイデア? –

+0

これには文字配列の配列を使用できます。本質的にそれは文字列の配列になります。 – Hari

+0

どうすればいいですか? –

関連する問題