отсканируйте строку с цифрами и словами и просто сохраните слова в - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть текстовый файл, в котором перечислены альбомы и песни. например:
Пинк Флойд: Темная сторона Луны
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 голосов
/ 11 ноября 2018

Проверьте возвращаемое значение 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);
  }
}  
...