我有一个列出了专辑和歌曲的文本文件。
例如:
平克·弗洛伊德(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);
答案 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);
}
}