用数字和单词扫描一行,然后将单词保留在c中

时间:2018-11-11 18:13:28

标签: c file-io scanf text-files fgets

我有一个列出了专辑和歌曲的文本文件。 例如:
平克·弗洛伊德(Pink Floyd):月之暗面
0:01:30-与我说话
0:02:43-呼吸
0:03:36-运行中
0:04:36-天空中的伟大演出

我正在使用sscanf来获取每首歌曲的持续时间。当我尝试获取歌曲名称时,我只是得到一个空白页。我如何才能丢弃所有我不需要的其他字符。到目前为止,我一直使用这个:

int temp1,temp2,temp3;
char str[100];
char symbol[2]="-";

FILE *fp;
fp = fopen("albums.txt","r");

if (fp == NULL) {
    printf("Error: unable to open ‘albums.txt’Report error.in mode ’r’\n");
    exit(EXIT_FAILURE);
}  


while (fgets(str, 100, fp) != NULL)
{
    if(strstr(str,symbol))
    {  
        sscanf(str,"%d:%d:%d",&temp1,&temp2,&temp3);
        getHour(temp1,temp2,temp3);         //temp1:hours, temp2:minutes, temp3:seconds
    }
}  

fclose(fp);

1 个答案:

答案 0 :(得分:2)

测试sscanf()的返回值是否成功。使用"%*d"扫描int,但不保存。使用"%[^\n]"扫描并保存所有非'\n'字符。

代码可以在扫描过程中使用“-”。

while (fgets(str, sizeof str, fp) != NULL) {
  char title[sizeof str];  // Wide enough for anything from `str`.
  if (sscanf(str, "%*d :%*d :%*d - %[^\n]", title) == 1) {
    // success
    printf("<%s>\n", title);
  }
}