1

私はCが初めてfscanfで、さまざまな長さのファイルの行から読み取るために使用しようとしています

ファイルから読み取ることができる 3 つの異なる行があります。

string
string char
string char char

私はこれを持っています:

char elem1;
char elem2;
char *str;

while(fscanf(file, %s%c%c, str, &elem1, &elem2) == 3) {
    ...do stuff
}

したがって、予想される 3 つの引数すべてを取得した場合は明らかにこれで問題ありませんが、行に文字列が含まれているだけの場合、次の行の文字列の最初の 2 文字が elem1 と 2 に割り当てられます。

どうすればそれを説明できますか?

4

2 に答える 2

3

行全体を読んで、行strtokの単語を取得するために使用する必要があります。

strtok_r編集: の代わりに使用する利点については、コメントのディスカッションを参照してくださいstrtok

于 2013-11-04T02:22:39.083 に答える
2

を使用fgetsして、一度に 1 行ずつ読み込んでから、sscanfその行だけを調べて 1、2、または 3 項目を探すことができます。

char elem1; char elem2; char str[1000]; char line[1000];

while(fgets(line, 1000, file) != NULL) {
    switch(sscanf(line, "%s %c %c", str, &elem1, &elem2)) {
        case 3: /* str, elem1, elem2 are valid */
            break;
        case 2: /* str and elem1 are valid */
            break;
        case 1: /* str is valid */
            break;
    }
}
于 2013-11-04T02:31:36.977 に答える