0

タスクのリストとステータスを含むファイルがあります。

PENDING Task number 1
COMPLETED Task number 2
COMPLETED Task number 3

私はこのファイルを次のように読み込もうとしています:

char status[10];
char text[1024];

while(fscanf(file, "%s %s", status, text) != EOF) {
  printf("%s %s\n", status, text);
}

ただし、出力は完全に間違っています。タスク テキストの最初の単語のみがテキスト変数に到達します。どうすればこれを修正できますか?

4

3 に答える 3

0
char status[10];
char text[1024];
char number[1024];
char i[1024];

while(fscanf(file, "%s %s %s %s", status, text, number, i) != EOF) {
  printf("%s %s %s %s\n", status, text, number, i);
} 

「number」フィールドが常に「number」であり、その後に int が続くことがわかっている場合は、次のように言えます。

char status[10];
char text[1024];
int i;

while(fscanf(file, "%s %s number %d", status, text, i) != EOF) {
  printf("%s %s number %s\n", status, text, i);
} 

また

char line[1000];

while(fgets(line, 1000, file)) {
    char *p;
    for(p = strtok(line, " \n"); p; p = strtok(p, " \n")) {
        printf("%s ", p);
    }
    printf("\n");
}
于 2013-09-05T19:10:48.413 に答える
0

行ごとに読み込んでから、それらをBuffer使用strtok()して単語に分割できます...

char *fgets(char *s, int size, FILE *stream);

#define MAX_LENGTH 100
File *ptr;
char buffer[MAX_LENGTH]
ptr=fopen("filepath","mode");
while(fgets(buffer,sizeof(buffer),ptr)!=EOF)
{
//use strtok  
}
于 2013-09-05T19:17:04.860 に答える
0

このようなリファレンスを読むと、入力がセットにないときに読み取る負のセットを含め、セットをフォーマットとして使用できることがわかります。これは、次のようなことができることを意味します

if (fscanf(file, "%s %[^\n]s", status, text) == 2)
{
    /* Got all */
}

format-string"%s %[^\n]s"では、最初の文字列%sは eg を読み取り"PENDING"、2 番目の format-string%[^\n]sは改行までの残りを読み取るため、"Task number 1".

于 2013-09-05T19:17:05.903 に答える