打印特定行

时间:2019-05-22 17:12:32

标签: c file

尝试打印.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 :(得分:0)

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;
}