Печать определенных строк - PullRequest
0 голосов
/ 22 мая 2019

возникла проблема при попытке печати определенных строк файла .txt.

Содержимое файла:

1ºAmsterdao

1.1 PDI
Casa de Anne Frank
-Descricao: Museu biografico localizado na cidade de Amsterdao, capital dos Paises Baixos.
-Horario de funcionamento: Abertura*7h Fecho*19h

1.2 PDI
Museu Van Gogh
-Descricao: Museu em Amsterdao, nos Paises Baixos. 
-Horario de funcionamento: Abertura*8h Fecho*18h

1.3 PDI
Museu da Heineken
-Descricao: Visita interativa pela historia da conhecida marca numa antiga cervejaria que termina numa sala de degustaçao.
-Horario de funcionamento: Abertura*10h Fecho*19

2ºBangkok

2.1 PDI
Grande Palacio de Bangkok
-Descricao: Conjunto de edificios em Bangkok, Tailandia, que serviu     como residencia oficial do rei de Tailandia.
-Horario de funcionamento: Abertura*8h Fecho*15h

.,.

И он поднимается до 20º.Я пытаюсь напечатать первую букву слова в каждой строке в формате «2ºBangkok».Проблема в том, что файл может быть изменен и может быть добавлено больше «PDI», таких как 1.4, 1.5 и т. Д., Поэтому нет никакого способа узнать, сколько строк между ними.

То, как япопытаться обойти, это получить каждый символ строки, использовать atoi (), а затем сравнить его с номером строки, которую я напечатал ранее, поэтому он будет печататься только тогда, когда число больше.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define MAX_LENGTH 500


int main () 
{

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

    char s[MAX_LENGTH];
    int numero;
    int numero_2;

    while (!feof(fp)) {
        fscanf(fp, "%d", &numero);
        printf("%d", numero);
        fgets(s, MAX_LENGTH, fp);
        numero_2 = s[0];
        printf("%c\n", s[1]);
        while(numero_2 != (numero + 1)){
            fgets(s, MAX_LENGTH, fp);
            numero_2 = s[0];
            atoi(numero_2);
        }
    }
    fclose(fp);
}

Вывод, который я ожидал, был "1A \ n 2B \ n 3C ...", и вместо этого я получаю вывод "1A \ n".

1 Ответ

0 голосов
/ 22 мая 2019
while (true) {
        if (!fgets(str, sizeof(str), fp))
                break;
        if (sscanf(str, "%d°%c", &n, &c) != 2)
                continue;
        if (n <= prev)
                continue;
        printf("%i%c\n", n, c);
        prev = n;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...