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

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

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

Что делать?

Это должно работать, когда вы не можете использовать 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; } 

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

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

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

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

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

Например

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

Против

 // Reads at most 1 character char c; fgets(&c,1,pFile); 

Это скорее комментарий, чем полный ответ, но у меня недостаточно комментариев для комментариев. 🙂

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

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

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

fgets() должен быть способом …

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

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

 // Читает 500 символов или 1 строку, в зависимости от того, что меньше
 char c [500], chewup;
 while (true) {
     fgets (c, sizeof (c), pFile);
     если (! feof (pFile)) {
         chewup = getc (pFile);  // Чтобы разжевать терминатор новой строки
         // Делаем что-то с C
     } Еще {
         перерыв;  // Конец файла ...
     }
 }

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

На самом деле это была не моя вина. В этом случае. Я использовал функцию strtok и случайно модифицировал мою оригинальную исходную строку. Поэтому во время печати я получал ошибку …

Спасибо всем за помощь мне .. 🙂

Вы можете использовать fscanf вместо fgets. Потому что fgets fscanf для символов, включая пробелы, но при использовании fscanf вы можете отдельно обращаться к данным, сохраненным в файле .eg, есть файл с именем class roll.now объявить строку и две целые строки.