[英]How would I capture a string using 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...
如您所見,代碼由於某種原因捕獲了單個單詞,而不是分號之前的整個字符串。 我將使用哪個表達式來獲取整個字符串? 編輯拼寫
盡管在這種情況下fscanf
可能不是最好的函數,但是正式地仍然可以使用它來捕獲以;
結尾的字符串;
通過使用以下格式說明符
fscanf(fileptr, "%[^;];%i",
albums[size].tracks[track].name,
&albums[size].tracks[track].length);
不過,這將要求輸入文件遵守非常嚴格的格式要求。 還要注意,如果您的albums[size].tracks[track].length
是一個int
對象,那么在albums[size].tracks[track].length
之前需要&
運算符。 在fscanf
使用%i
格式說明符時,它需要一個指向 int
的指針作為參數。
另外,您的printf
看起來不正確。 它應該是
printf("Track number %i : %s", track, albums[size].tracks[track].name);
不應該在albums[size].tracks[track].name
之前albums[size].tracks[track].name
那個&
。
您不應該fscanf
用於格式化數據。 您的數據不是以對fscanf
友好的方式真正格式化的。 您最好先閱讀整行,然后再搜索分號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.