2016-02-14 6 views
3

Я хотел бы начать с это мой первый пост, и я не делаю это как домашнее задание, а просто представить себе, чтобы писать на C.Перезапись текстовый файл в C

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

Вот результат:

у = 19530

у = 3906

у = 78119530

у = 15623906

у = -1054493078

Может кто-нибудь, пожалуйста, объясните, почему в третьем ration цикла, он перескакивает до 78119530?

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

int main(int argc, char *argv[]){ 
int x = 19530; 
int y; 
FILE *buff; 
buff = fopen("BUFF.txt","w+"); 

for(int i = 1; i <= 5; i++){ 
    fprintf(buff, "%d", x); 
    rewind(buff); 
    fscanf(buff, "%d", &y); 
    printf("y = %d\n", y); 
    y = y/5; 
    fclose(fopen("BUFF.txt", "w+")); 
    fprintf(buff, "%d", y); 

    } 

return 0; 
} 
+1

Ваша программа разбита многочисленными способами. Почему вы не проверяете ошибки? Почему вы всегда печатаете 'x', а затем читаете' y'? – fuz

+0

Nevermind Я идиот. :( –

+0

Итак, я удалил fprintf (buff, «% d», x) и перемотал (buff); из цикла for теперь правильный результат для пользователя. Однако мой вывод в файл по-прежнему неверен. –

ответ

4

Вы пропускаете файловые потоки. Следующая строка неверна:

fclose(fopen("BUFF.txt", "w+")); 

Что вы делаете здесь снова открыть файл и закрыть новый поток, оставив старый поток (хранится в buff) действует.

Вы хотите:

fclose(buff); 
buff = fopen("BUFF.txt", "w+"); 

Или это:

freopen("BUFF.txt", "w+", buff); 
+0

Я вижу, спасибо! Я думал, что мое заявление будет эквивалентно freopen. –