Чтение одной строки за один раз в C

Какой метод может использоваться для чтения одной строки за один раз из файла в C?

Я использую функцию fgets, но она не работает. Это читает, пространство разделило маркер только.

Что сделать?

10
задан CerebralCortexan 5 December 2015 в 04:13
поделиться

9 ответов

Это должно работать, если по какой-то причине вы не можете использовать fgets () .

int readline(FILE *f, char *buffer, size_t len)
{
   char c; 
   int i;

   memset(buffer, 0, len);

   for (i = 0; i < len; i++)
   {   
      int c = fgetc(f); 

      if (!feof(f)) 
      {   
         if (c == '\r')
            buffer[i] = 0;
         else if (c == '\n')
         {   
            buffer[i] = 0;

            return i+1;
         }   
         else
            buffer[i] = c; 
      }   
      else
      {   
         //fprintf(stderr, "read_line(): recv returned %d\n", c);
         return -1; 
      }   
   }   

   return -1; 
}
12
ответ дан 3 December 2019 в 13:22
поделиться

Функция fgets будет читать одну строку из файла или символы num , где num - второй параметр, передаваемый в fgets . Вы передаете достаточно большое число, чтобы прочитать строку?

Например,

// Reads 500 characters or 1 line, whichever is shorter
char c[500];
fgets(c, 500, pFile);

Vs.

// Reads at most 1 character
char c;
fgets(&c,1,pFile);
7
ответ дан 3 December 2019 в 13:22
поделиться

Это скорее комментарий, чем полный ответ, но мне не хватает баллов для комментария. :)

Вот прототип функции fgets():

char *fgets(char *restrict s, int n, FILE *restrict stream);

Она будет читать n-1 байт или до новой строки или eof. Для дополнительной информации смотрите здесь

3
ответ дан 3 December 2019 в 13:22
поделиться

fgets () должен быть подходящим вариантом…

2
ответ дан 3 December 2019 в 13:22
поделиться

Используйте следующую программу для получения строки за строкой из файла.

#include <stdio.h>
int main ( void )
{
  char filename[] = "file.txt";
  FILE *file = fopen ( filename, "r" );

  if (file != NULL) {
    char line [1000];
    while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ {
      fprintf(stdout,"%s",line); //print the file contents on stdout.
    }

    fclose(file);
  }
  else {
    perror(filename); //print the error message on stderr.
  }

  return 0;
}
17
ответ дан 3 December 2019 в 13:22
поделиться

Если вы кодируете для платформы, на которой доступна библиотека GNU C, вы можете использовать getline():

http://www.gnu.org/s/libc/manual/html_node/Line-Input.html

8
ответ дан 3 December 2019 в 13:22
поделиться

Источник ошибки:

На самом деле это не моя вина .. В данном случае. { {1}} Я использовал функцию strtok и случайно изменил мою исходную исходную строку. Следовательно, при печати я получал сообщение об ошибке ...

Спасибо всем за помощь ..:)

0
ответ дан 3 December 2019 в 13:22
поделиться

Используйте fgets , чтобы читать из строки, а затем используйте getc (...) , чтобы пережевать новую строку или конец строки, чтобы продолжить чтение .... вот пример постоянного чтения строки ...

// Reads 500 characters or 1 line, whichever is shorter
char c[500], chewup;
while (true){
    fgets(c, sizeof(c), pFile);
    if (!feof(pFile)){
        chewup = getc(pFile); // To chew up the newline terminator
        // Do something with C
    }else{
        break; // End of File reached...
    }
}
2
ответ дан 3 December 2019 в 13:22
поделиться

используйте либо fgets, если вы знаете, что ваши строки поместятся в буфер, либо используйте fgetc для большего контроля над чтением

2
ответ дан 3 December 2019 в 13:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: