В общем закавырка в feof и немного в fseek  Принцип работы с функцией feof() следующий: необходимо дочитать до конца файла, а потом прочитать еще один или более символов/байт за пределами файла, и только после этого feof() поймет что файл всетаки кончился. Может наконец то сейчас добью проблему 
| Код | #include <stdio.h>; #include <conio.h>; main() { int max, min, pr; FILE *f; clrscr(); printf("Creating files, 777 - cancel\n"); f = fopen("in.dat","w+"); scanf("%d",&pr); while (pr != 777) { putw(pr, f); scanf("%d", &pr); } rewind(f); min = getw(f); max = min; printf("Not modifed file\n"); printf("%d",min); while ( (pr = getw(f)) != EOF) { printf(" %d ",pr); if (min > pr) min = pr; if (max < pr) max = pr; } pr = min * max; rewind(f); printf ("\nPr = %d", pr); printf("\nsizeof(int) = %d \n",sizeof(int)); while ((min = getw(f)) != EOF) { if (min == 0) { fseek(f, -sizeof(int), SEEK_CUR); putw(pr,f); fseek(f,ftell(f),SEEK_SET); } } printf("\n Modifide file\n"); rewind(f); while ((pr = getw(f)) != EOF) { printf(" %d ", pr); } fclose(f); getch(); }
|
Вот полностью рабочий код, я и не думал, что это так просто и одновременно сложно, так вот
| Код | while ((pr = getw(f)) != EOF)
|
Считывать надо вот так(Может и это не лучший способ поправьме меня, но он работает)
| Код | fseek(f, -sizeof(int), SEEK_CUR); putw(pr,f); fseek(f,ftell(f),SEEK_SET);
|
И самое интересно, что если после putw не вызвать снова fseek(хотя я проверял что позиция одинаковая и по логике fseek ненадо) то следующий элемент будет концом файла и ничего дальше не заменится... Так вот и все Всем спасибо! |