Fgets() - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Друзья, помогите разобраться в следующем. Нужно построчно считать файл. И вот какой вопрос. char d[300] - массив. Он описывается адресом начала массива и длиной. Тоесть, функция fgets кладет 350 значений по адресу начала массива d. И все работает! Но длинна d только 300. И ничего никуда не пропадает. Как так? Если функция будет читать первые 15 символов - fgets (d, 15, f) - то строки все равно попадут полностью в d (Длина одной строки 150-250 символов). Объясните, пожалуйста, почему?
{
    FILE *f;
 
    char d[300];
    char* h = "f";
    
    f = fopen("f1.txt", "r");
    
    while(!feof(f))
    {
        fgets(d, 350, f);
        printf("%s",d);
    }
 
    scanf(h);
    return 0;
}

Решение задачи: «Fgets()»

textual
Листинг программы
/*...*/
FILE * f;
char buf[256];
int iVal;
char[256] sVal;
double dVal;
 
/* открытие файла */
while ( fgets(buf, 256, f) ) {
    if ( *buf == '\n' || *buf == '#' )
        continue;
    if ( sscanf(buf, "%d %s %lf", &iVal, sVal, &dVal) != 3 ) {
        /* PARSING ERROR! */
    }
    /* что-то сделать с прочитанными переменными */
}
/*...*/

Объяснение кода листинга программы

  1. Объявлены необходимые переменные:
    • FILE * f; - указатель на файл для чтения;
    • char buf[256]; - буфер для чтения строки из файла;
    • int iVal; - переменная для хранения целочисленного значения;
    • char sVal[256]; - переменная для хранения строкового значения;
    • double dVal; - переменная для хранения числового значения с плавающей точкой.
  2. Открывается файл в режиме чтения с помощью функции fopen().
  3. Запускается цикл while, который будет выполняться до тех пор, пока функция fgets() успешно читает строку из файла.
  4. В каждой итерации цикла проверяется, является ли первый символ строки символом новой строки или символом решетки. Если это так, то цикл переходит к следующей итерации, игнорируя текущую строку.
  5. Если первая строка не является символом новой строки или символом решетки, то строка считывается с помощью функции sscanf().
  6. Функция sscanf() пытается считать три значения из строки: целочисленное значение iVal, строковое значение sVal и числовое значение с плавающей точкой dVal.
  7. Если функция sscanf() не смогла считать все три значения, то считается, что произошла ошибка парсинга, и выполняется блок кода, помеченный комментарием «PARSING ERROR!».
  8. Если все три значения успешно считаны, то выполняется блок кода, который должен что-то делать с этими значениями.
  9. После завершения цикла while закрывается файл с помощью функции fclose().
  10. Если была допущена ошибка при открытии файла или чтении из него, то программа выдаст сообщение об ошибке и завершится.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы