2

fprintf()1つのファイルに3つの文字列をすべて同じ行に配置したいと思います。

最初の2つはスペースを含めることはできませんが、3つ目はスペースを含めることができます。IEword word rest of line

fscanf()誰かがそれを3つの変数に変換する方法を教えてもらえますか?

簡単にできる場合は、区切り文字をいくつか入れてもかまいません。例えば[word] [word] [rest of line]

4

2 に答える 2

4

区切り文字なしでも実行できます。

char s1[32], s2[32], s3[256];

if(sscanf(line, "%31s %31s %255[^\n]", S1, S2, S3) == 3)
 /* ... */

line入力が実際に改行で終わっている限り、これは機能するはずです。

もちろん、文字列のサイズを調整する必要があります。また、プリプロセッサを使ってサイズを繰り返さないようにすることもできますが、そうすると複雑になるため、この例ではそれを避けました。

于 2012-07-19T09:52:59.160 に答える
1

を使用scanfして2つの単語をスキャンし、を使用fgetsして残りの行を取得できます。

FILE *f = stdin; // or use fopen to open a saved file

// use buffers large enough for your needs
char word1[20];
char word2[20];
char restOfLine[100];

// make sure fscanf returns 2 (indicating 2 items scanned successfully)
fscanf(f, "%20s %20s", word1, word2); 

// make sure fgets returns &restOfLine[0]
fgets(restOfLine, sizeof restOfLine, f);

fgetsキャラクターに遭遇した場合'\n'、それもバッファーに入れられることに注意してください。したがって、キャラクターが不要な場合は、手動で削除する必要があります。fscanf2以外を返す場合、またはをfgets返すNULL場合は、入力の読み取りに問題がありました。

于 2012-07-19T10:01:37.553 に答える