簡體   English   中英

我如何使用fscanf捕獲字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM