0

ファイル操作を使用して C でリンクされたリストが必要です。行を取得して分割し、ストラクタに格納したい。しかし、2 つの文字列を分割することはできません。

私のファイルは次のようになります:

1#エムレ#ドーガン
2#ジョン#スミス
3#アシュリー#トーマス
etc...

fscanf を使用してファイルから 1 行を読み取りたい。

fscanf(file,"%d#%s#%s",&number,name,surmane);

しかし、結果は

番号:1
名前:エムレ#ドーガン

名前のその # 要素を取り除き、それを名前と姓に分割するにはどうすればよいですか。

4

2 に答える 2

5
#include <stdio.h>
#include <string.h>

int main(void) {

    FILE *fptr;
    fptr = fopen("Input.txt", "r");

    int number;
    char *name;
    char *surname;
    char line_data[1024];

    fgets(line_data, 1024, fptr);

    number = atoi(strtok(line_data, "#"));
    name = strtok(NULL, "#");
    surname = strtok(NULL, "#");    

    printf("%d %s %s", number, name, surname);
}

出力:

1 Emre Dogan

編集:変数「数値」を文字列から整数に変換しました。

于 2013-10-22T07:38:01.253 に答える
0

を使用して行全体を読み取り、fgets()その行を解析することをお勧めします。これはより堅牢ですfscanf()。入力ストリームで直接使用すると、fscanf()空白をスキップする方法が原因で混乱する可能性があります。

したがって、次のことができます。

char line[1024];

if(fgets(line, sizeof line, file) != NULL)
{
  int age;
  char name[256], surname[256];

  if(sscanf(line, "%d#%255[^#]#%255s", &age, name, surname) == 3)
  {
    printf("it seems %s %s is %d years old\n", name, surname, age);
  }
}

これは、%[]フォーマット指定子を使用#して、解析された文字列にセパレーターが含まれないようにします。strtok()これは、回避するのが最善の恐ろしい関数であるよりもクリーンだと思います。

于 2013-10-22T09:31:54.743 に答える