我想使用文件操作在C中的链表。我想获得一条线,并将其拆分并存储在结构中。但我不能分裂两个字符串。在C中使用“fscanf”如何拆分两个字符串?
我的文件是这样的:
1#埃姆雷#多安
2#约翰#史密斯
3#阿什利#托马斯
等等
我想读取一行文件使用fscanf。
fscanf(file,"%d#%s#%s",&number,name,surmane);
但结果是
数量:1
名称:埃姆雷#多甘
如何可以在名称中摆脱#元素,并把它分解到姓名;
我想使用文件操作在C中的链表。我想获得一条线,并将其拆分并存储在结构中。但我不能分裂两个字符串。在C中使用“fscanf”如何拆分两个字符串?
我的文件是这样的:
1#埃姆雷#多安
2#约翰#史密斯
3#阿什利#托马斯
等等
我想读取一行文件使用fscanf。
fscanf(file,"%d#%s#%s",&number,name,surmane);
但结果是
数量:1
名称:埃姆雷#多甘
如何可以在名称中摆脱#元素,并把它分解到姓名;
#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
编辑: Coverted变量 “数量” 从字符串到整数。
谢谢@Anand ...那么我怎么能将这个“字符串”数字转换为int .. –
@EmreDoğan使用'atoi' http: //www.cplusplus.com/reference/cstdlib/atoi/ – Sadique
但是这个程序仍然显示我只有最后一个名字和数字..并分裂它。编号:1 Emre DOGAN 2 Emre GAN 3 Emre N 4 Emre DOGN等。 –
最好用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()
更清洁,这是一个最好避免的可怕功能。
尝试使用strtok()来解析输入字符串 – Anand
你也可以使用sscanf()函数。详细的例子去这里http://www.tutorialspoint.com/c_standard_library/c_function_sscanf.htm –