我想使用文件操作在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 –