打印文件的特定行

时间:2019-05-20 21:07:30

标签: c

我正在尝试通过将行的第一个字符与“-”进行比较来打印.txt文件的特定行,并且仅在不相同的情况下才进行打印。

console.log

我要打印的文件的格式是这样的,有20个Locals,每个都有最多1.3个不同的PDI。

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

构建代码时,它运行时没有错误消息,但是控制台根本不打印任何内容。

4 个答案:

答案 0 :(得分:1)

strcmp比较整个字符串,而不只是其中的单个字符。

line[0] == '-'作为仅测试第一个字符的条件。并注意'-'中的单引号表示单个字符,而"-"之类的双引号则表示以0结尾的字符串文字。

答案 1 :(得分:1)

比较应该针对第一个字符:

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

打印时是否可能在字符串中添加换行符?

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

如果您希望将每一行立即写入输出流,请fflush

fflush(stdout);

答案 2 :(得分:0)

不要阅读过多的内容。一次一个字符即可:

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

答案 3 :(得分:0)

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