我有一个格式如下的文件
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 :(得分:4)
虽然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
运算符。在%i
中使用fscanf
格式说明符时,它会将指针作为参数重新命名为int
。
此外,您的printf
看起来不正确。它应该是
printf("Track number %i : %s", track, albums[size].tracks[track].name);
&
之前的albums[size].tracks[track].name
不应该在那里。
答案 1 :(得分:0)
您不应该fscanf
用于格式化数据。您的数据格式不是以fscanf
友好的方式格式化。你最好阅读整行,然后只搜索分号。