2013-11-25 132 views
0

我有一個被格式化這樣如何使用fscanf捕獲字符串?

A New Day Has Come (Radio Remix); 239 
Ten Days; 227 
Goodbye's (The Saddest Word); 198 
Prayer; 313 
I Surrender; 271 
At Last; 209 
Sorry For Love; 301 

我將如何使用fscanf搶的字符串的文件,並且也是繼分號多少?我想這

for(track = 0; track < albums[size].num_tracks; ++track){ 

    fscanf(fileptr,"%s;%i",albums[size].tracks[track].name,albums[size].tracks[track].length); 

    //print out the tracks 
    printf("Track number %i : %s", track, &albums[size].tracks[track].name); 
} 

然而,當發生的printf,整個字符串不打印,而不是像

Track number 0 : A 
Track number 1 : New 
Track number 2 : Day 
etc... 

所以你可以看到,代碼捕獲了一些個別單詞原因,而不是整個字符串在分號之前。我將使用哪種表情來獲取整個字符串?編輯爲拼寫

+0

您是否必須使用fscanf?由於分號分隔文本和數字,爲什麼不能使用strtok函數呢?這是一個strtok的例子http://www.cplusplus.com/reference/cstring/strtok/ – chuthan20

+0

我想我需要使用fscanf :(該死的C項目 – Zack

+1

當你使用%s時,它會嘗試讀取字符串,直到非空白字符已到達,所以你會一次得到每個單詞 – chuthan20

回答

4

雖然fscanf可能無法在這種情況下,使用最好的功能,正式一個仍然可以用它來抓取,通過使用以下格式說明

fscanf(fileptr, "%[^;];%i", 
    albums[size].tracks[track].name, 
    &albums[size].tracks[track].length); 

這將需要與;結束串輸入文件,以堅持非常嚴格的格式要求。還請注意,如果您的albums[size].tracks[track].lengthint對象,則之前需要&運算符。在fscanf中使用%i格式說明符時,它需要指針int作爲參數。

此外,您的printf看起來不正確。它應該是

printf("Track number %i : %s", track, albums[size].tracks[track].name); 

&albums[size].tracks[track].name之前不應該在那裏。

+0

由於某種原因這個segfaulted :( – Zack

+0

@ zack:原因必須在你沒有顯示的東西是否足夠接收緩衝區的字符串? – AnT

+0

謹慎解釋%[^;]的含義是什麼? – Zack

0

您不應fscanf是格式化數據。您的數據格式不符合fscanf的要求。你最好閱讀整行,然後搜索分號。

+0

如果我最終不得不這樣做,一旦我抓住它,我將如何解析該行。說我是一個完整的C newb Perl/python通常 – Zack

相關問題