2013-05-13 3 views
0

Я пытаюсь воссоздать программу, которую я видел в классе. Учитель сделал файл с 10 строками, он показал нам, что файл действительно создан, а затем он отобразил его содержимое. Мой код не работает по какой-то причине, он просто печатает то, что выглядит как «=» миллион раз, а затем выходит.отображение содержимого файла на мониторе в C

Мой код:

void main() 
{ 
    FILE* f1; 
    char c; 
    int i; 
    f1=fopen("Essay 4.txt","w"); 
    for(i=0;i<10;i++) 
     fprintf(f1," This essay deserves a 100!\n"); 
    do 
    { 
     c=getc(f1); 
     putchar(c); 
    }while(c!=EOF); 
} 

В чем проблема? насколько я вижу, я сделал именно то, что было в приведенном примере.

+0

Предполагаете, что вам нужен режим «rw». – maverik

+0

Не только это, я думаю, это также связано с тем, что я не продвигаюсь f1. c = getc (f1) получает первый символ, putchar (c) печатает его, но когда я делаю это снова, он все равно будет печатать первый символ ... правильно? –

+0

Нет, 'getc' переместит курсор чтения. Другой вопрос, который вам, возможно, понадобится, искать: fseek (f1, 0, SEEK_SET); Перед чтением. – maverik

ответ

0

Поток как таковой:

  • Вы создаете файл (сброс его в пустой файл, если он существует). Это то, что делает режим "w".
  • Затем вы пишете материал. Обратите внимание, что позиция файла всегда считается самой последней, так как запись перемещает позицию файла.
  • Теперь вы пытаетесь прочитать с конца. Первое, что вы прочитали, будет уже EOF. Действительно, когда я пробую вашу программу на своем Mac, я просто получаю один странный персонаж, как можно было бы ожидать от того, что вы используете do { } while. Я предлагаю вам вместо этого сделать что-то вроде: for (c = getc(f1); c != EOF; c = getc(f1)) { putchar(c) } или аналогичный цикл.
  • Но также ваше чтение должно потерпеть неудачу в любом случае, поскольку в режиме файла "w" (только для записи) вместо "w+".

Так что вам нужно сделать две вещи: режим "w+" файла

  • использования.
  • Сбросить положение файла до начала файла после его записи: fseek(f1, 0, SEEK_SET);.