Чтение / запись текстового файла в C-программировании - PullRequest
4 голосов
/ 18 декабря 2011

Мне нужно что-то записать в текстовый файл и прочитать содержимое, а затем распечатать их на экране. Ниже приведен код, который я написал, он может правильно создавать и записывать содержимое в файл, но не может читать из файла и правильно печатать.

#include<stdio.h>
#include<stdlib.h>
main()
{
    char filename[20]={"c:\\test.txt"};
    FILE *inFile;
    char c;
    inFile=fopen(filename,"w+");

    if(inFile==NULL)
    {
        printf("An error occoured!");
        exit(1);
    }
    while((c=getchar())!=EOF)
        fputc(c,inFile);
    fputc('\0',inFile);

    while((c=fgetc(inFile))!=EOF)
        putchar(c);
}

Кто-нибудь скажет мне, что не так с этой программой, особенно последние две строки. Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 18 декабря 2011

Вам нужно добавить

fseek(inFile, 0, SEEK_SET);

до

while ((c=fgetc(inFile)) != EOF)
     putchar(c);

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

1 голос
/ 18 декабря 2011
char c;

ваша первая проблема.getc и getchar возврат int с, а не char с.Внимательно прочитайте man-страницу и измените ее на:

int c;

Вы также не сбрасываете поток inFile после записи.Поставьте что-то вроде:

fseek(inFile, 0L, SEEK_SET);

, прежде чем начать чтение из этого потока.(См. Справочную страницу.)

Наконец, ваша основная подпись не является стандартной.Использование:

int main(void) { ...
1 голос
/ 18 декабря 2011

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

fseek(inFile, 0, SEEK_SET);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...