Какой метод можно использовать для чтения одной строки за раз из файла в C?
Я использую функцию fgets, но она не работает. Он считывает только разделенный пробел.
Что делать?
Какой метод можно использовать для чтения одной строки за раз из файла в 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 <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;
}
Если вы кодируете платформу с библиотекой GNU C, вы можете использовать getline():
Функция 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);
Это скорее комментарий, чем полный ответ, но у меня недостаточно очков для комментариев.:)
Здесь прототип функции для fgets():
char *fgets(char *restrict s, int n, FILE *restrict stream);
Он будет читать n-1 байт или до новой строки или eof. Для получения дополнительной информации см. здесь
fgets()
должен быть способ...
используйте либо fgets
, если вы знаете, что ваши строки будут вписываться в буфер или использовать fgetc
для большего контроля над чтением
Используйте 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... } }
Источник ошибки:
На самом деле это была не моя ошибка. В этом случае. Я использовал функцию strtok и случайно модифицировал мою оригинальную исходную строку. Поэтому во время печати я получал ошибку...
Спасибо всем за помощь мне..:)
Вы можете использовать fscanf вместо fgets. Поскольку fgets fscanf для символов, включая пробелы, но при использовании fscanf вы можете отдельно обращаться к данным, сохраненным в файле .eg, есть файл с именем class roll.now объявить строку и две целые строки.