1

私はほとんどのコード全体を把握しています。問題は、ファイルに名前があり、一部の名前にはミドルネームが含まれていないことです。ファイル内の各名前は新しい行にあります

リンカーン、エイブラハム
・オバマ、バラク・フシアン
・ドウ、ジョン

これに関する私の問題は、もともと fscanf でそれぞれの名前を読み取る 2 つの配列があったが、Hussien を新しい行として読み取ることですか? それで、ミドルネームに対しても3つの配列を実行しようとしましたが、ファイルを読み込むと、出力が次のように表示されました。

リンカーン、エイブラハム・オバマ、
バラク・フシアン、ドウ
・ジョン

while ( fscanf( input,"%s %s", &last[i],&first[i] ) !=  EOF ) 
{ i++; }

私は何を間違っていますか?行全体をスキャンしたいのですが、プログラムの別の部分では、「ユーザーID」が作成されるため、姓と名を区切る必要があります. a_lincoln など

4

4 に答える 4

2

"%[^,], %[^\r\n]"でフォーマット文字列として使用しますfscanf。姓のコロンは無視され、名の同じ行の残りの文字が読み取られます。

于 2012-10-26T06:38:39.187 に答える
0

これを行う

char *last[30];
char *first[30];
    while ( fscanf( input,"%s %s", last[i],first[i] ) !=  EOF ) 
于 2012-10-26T06:29:50.897 に答える
0

fscanf、scanf、または sscanf のフォーマット文字列では、空白の各インスタンスにより、関数は改行文字を含む、その場所の入力に現れる空白を読み取って破棄します。そのため、fscanf は行ごとに読み取ることはしません。

行を文字列に読み込むには、別の関数を呼び出す必要があります。次に、sscanf を呼び出して文字列を読み取ります。最初にカンマまでの部分、次にカンマの後の部分です。

于 2012-10-26T06:34:25.687 に答える
0

を使用してファイルから行を読み取ります while ( fscanf( input,"%[^\n]s", line) != EOF )

「行は文字配列または文字ポインターの可能性があります」

これで、ファイルから完全な行が得られました

  • 行ごとに strtok() 関数を使用してトークンを分離します
  • トークン数を使用すると、ミドルネームが存在するかどうかを知ることができます。
于 2012-10-26T07:01:47.803 に答える