簡體   English   中英

在C中使用“ fscanf”如何分割兩個字符串?

[英]Using “fscanf” in C How can Split two strings?

我想使用文件操作在C中創建一個鏈接列表。 我想獲得一條線並將其拆分並存儲在構造函數中。 但是我不能拆分兩個字符串。

我的文件是這樣的:

1#埃姆雷#多甘
2##約翰·史密斯
3#阿什利#托馬斯
等等...

我想使用fscanf從文件中讀取一行。

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

但是結果是

1號
姓名:Emre#Dogan

如何去除名稱中的#元素,並將其拆分為名稱和姓氏;

#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

編輯:涵蓋了從字符串到整數的變量“數字”。

最好使用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()更干凈,最好避免使用這種可怕的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM