我想使用文件操作在 C 中创建一个链表。我想得到一条线并将其拆分并存储在结构中。但我不能拆分两个字符串。
我的文件是这样的:
1#Emre#Dogan
2#John#Smith
3#Ashley#Thomas
等...
我想使用 fscanf 从文件中读取一行。
fscanf(file,"%d#%s#%s",&number,name,surmane);
但结果是
编号 : 1
名称 : Emre#Dogan
如何摆脱名称中的那个#元素并将其拆分为姓名和姓氏;
我想使用文件操作在 C 中创建一个链表。我想得到一条线并将其拆分并存储在结构中。但我不能拆分两个字符串。
我的文件是这样的:
1#Emre#Dogan
2#John#Smith
3#Ashley#Thomas
等...
我想使用 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()
,这是一个最好避免的可怕功能。