c - 我将如何使用 fscanf 捕获字符串?

标签 c string capture scanf

我有一个格式如下的文件

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].lengthint 对象,则 & 运算符需要在 专辑[大小].轨道[轨道].长度。当在 fscanf 中使用 %i 格式说明符时,它需要一个指向 int指针作为参数。

此外,您的 printf 看起来不正确。应该是

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

albums[size].tracks[track].name 之前的 & 不应该存在。

关于c - 我将如何使用 fscanf 捕获字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184508/

相关文章:

Android:如何配置 "tinymix"用 "tinycap"录制系统音频

python - Python 的 len() 内置时间复杂度为 O(1) 的 secret 是什么

objective-c - 枚举的非整数基础类型

c# - Directshow录制/预览问题

c++ - 访问集合中字符串的第一个字母 C++

c - 如何在没有任何错误的情况下将文本稳健地复制到 char*

android - 无法解码流 java.io.FileNotFoundException/storage/emulated/0 打开失败 :ENOENT(No such file or directory

c - c中的子串位置

c++ - if 语句中的相等比较

从 R 中的字符串中删除\xa0\xa0