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

Я пытаюсь напечатать определенные строки файла .txt, сравнивая первый символ строки с «-», и печатая только, если он не совпадает.

void menu() {

  FILE *fp =fopen("save_projeto.txt","r");
  char line[MAX_LENGTH];
  fgets(line, MAX_LENGTH, fp);

  while(!feof(fp)){

    if (strcmp(line[0], "-") == 0) {
        fgets(line, MAX_LENGTH, fp);
    }

    else {
        printf("%s", line);
        fgets(line, MAX_LENGTH, fp);
    }
  }
}

Файл, который я пытаюсь распечатать, отформатирован следующим образом: 20 локальных и каждый из них имеют до 1,3 различных PDI.

1º Local
Amsterdao

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

Когда я создаю код, он работает без сообщений об ошибках, но консольвообще ничего не печатать.

Ответы [ 4 ]

1 голос
/ 21 мая 2019

Сравнение должно быть для первого символа:

if (line[0] == '-') {
    /* First char is a dash */
}

Возможно, добавить новую строку в строку при печати?

 printf("%s\n", line);

Если вы хотите, чтобы каждая строка была немедленно записана ввыходной поток, тогда fflush это:

fflush(stdout);
1 голос
/ 21 мая 2019

strcmp сравнивает всю строку, а не только один символ из нее.

Напишите line[0] == '-' как условие для проверки только первого символа. И обратите внимание на одинарные кавычки в '-', которые обозначают один символ, тогда как двойные кавычки, такие как "-", представляют строковый литерал с нулем в конце.

0 голосов
/ 21 мая 2019

@ Corot Другим подходом к решению вашей проблемы является следующий код:

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

/* Path to the file you are reading */
#define FILENAME  "save_projeo.txt"

/* Set the maximum length of text line in the input file */
#define MAX_LENGTH    92

/**************
 * Main Driver
 **************/
 int main()
 {
     FILE *fp;
     char buffer[MAX_LENGTH+1]; // buffer to hold data read from input file
     const char *str = "-";  // String (here char) to be searched
     size_t num = 1;

     fp = fopen(FILENAME, "r");

     // Is the file opened to read?
     if( !fp){
         fprintf(stderr, "Unable to open file <%s>\n", FILENAME);
         exit(EXIT_FAILURE);
     }
     while(fgets(buffer, MAX_LENGTH, fp)){
          // If the first num bytes of buffer does not match the first num byte of str
          // then print the content of buffer
          if(memcmp(buffer, str, num) != 0)
              printf("%s\n", buffer);
     }
     fclose(fp);
     return EXIT_SUCCESS;
 }
0 голосов
/ 21 мая 2019

Не читайте больше, чем нужно.Один символ за раз будет делать:

#include <stdio.h>

/* Print lines that do not start with '-' */
int
main(int argc, char **argv)
{
        int first_char=1;
        int print;
        int c;

        FILE *fp = argc > 1 ? fopen(argv[1],"r") : stdin;
        if( fp == NULL ) {
                perror(argv[1]);
                return 1;
        }

        while( (c = fgetc(fp)) != EOF ) {
                if( first_char )
                        print = c != '-';
                if( print )
                        putchar(c);
                first_char = c == '\n';
        }
        return ferror(fp);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...