функция fgetc не работает должным образом - PullRequest
0 голосов
/ 28 января 2019

Я тестирую функцию fgetc (), но она не работает должным образом (я использовал эту функцию, прежде чем я знаю, как она работает)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *file = NULL;
    int n;

    file = fopen("test.txt", "w+");
        if(file != NULL)
        {
            fputs("ab", file);
            printf("%c", fgetc(file));
        }
        else
        {
            printf("error");
        }
    return 0;
}

вывод должен быть "a", ноэто что-то еще

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Файл открыт как для записи, так и для чтения, но вам нужно fseek в правильное место в файле (здесь, в начале).В частности, при переключении между записью и чтением необходимо fseek или fflush.

Когда указан тип доступа "r +", "w +" или "a +", оба вида чтенияи запись включены (говорят, что файл открыт для «обновления»).Однако, когда вы переключаетесь с чтения на запись, операция ввода должна встретиться с маркером EOF.Если EOF отсутствует, вы должны использовать промежуточный вызов функции позиционирования файла.Функции позиционирования файла: fsetpos, fseek и rewind. Когда вы переключаетесь с записи на чтение, вы должны использовать промежуточный вызов либо для fflush, либо для функции позиционирования файла .

В любом случае после записи в файлуказатель файла находится не в том месте, чтобы прочитать только что написанное.

Таким образом, код становится

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *file = NULL;
    file = fopen("test.txt", "w+");
    if(file != NULL) {
        fputs("ab", file);
        fseek(file, 0, SEEK_SET);
        printf("%c", fgetc(file));
        fclose(file);
    }
    else {
        printf("error");
    }
    return 0;
}

И если вы хотите продолжить запись в файл, вы должны fseek, чтобыего конец.

0 голосов
/ 28 января 2019

Ваша ошибка в том, что вы пытаетесь прочитать файл, который был открыт для записи.Вы должны написать внутри него, затем закрыть файл и открыть его для чтения.Этот код покажет то, что я говорю:

#include<stdio.h>
#include<stdlib.h>



int main()
{


    FILE *fileRead, *fileWrite = NULL;
    int n;

    fileWrite = fopen("test.txt", "w+");
        if(fileWrite != NULL)
        {
            fputs("ab", fileWrite);
            fclose(fileWrite);
        }
        else
        {
            printf("error");
        }

    // Open again the file for read
    fileRead = fopen("test.txt", "r");
    printf("%c", fgetc(fileRead));
    fclose(fileWrite);

    // End function
    return 0;
}
...