Найти ошибку в реализации файлового ввода-вывода - C (СИ)
Формулировка задачи:
Ошибка заключается в том, что на этом промежутке
Не идёт запись(((Я не знаю что делать, через отладку этот отрезок вообще пропускается(
Вот код создания бин файла, сначала его запускать, это надо для выполнения главной программы
Вот собственно программа из-за которой одни беды
Задачка полезна в обучении файловой записи, можно юзать в обучении)))
Собственно текст задачи:
"Компоненты типизированного файла – целые числа. Удалить из него все нули. Добавить в начало файла количество отрицательных компонентов, а в конец – количество положительных."
Заранее спасибо за помощь и скорейшие отзывы =)
while(fread(&a,sizeof(int),1,f)) { if(a!=0)fwrite(&a,sizeof(int),1,g); printf("%d ",a); }
#include<stdio.h> #include<conio.h> #include<ctype.h> #include<stdlib.h> #include<time.h> float random (int N) {return rand() % N;} const int N=10; int main(void) { int i=0,j; FILE *f=fopen("chisla.bin","wb"); int a; srand(time(NULL)); if (f==NULL) printf ("Error\n"); else { for(i=0;i<10;i++) { a=rand()%19-9; fwrite (&a,sizeof(int),1,f); printf ("%d ",a); } } fclose(f); getch(); return 0; }
#include<stdio.h> #include<conio.h> #include<ctype.h> int main(void) { int i=0,j,x=1,flaq=0,flag=0,z=0; FILE *f=fopen("chisla.bin","rb"); FILE *g=fopen("chisla1.bin","wb"); int a; if (f==NULL) printf ("Error\n");else while(fread(&a,sizeof(int),1,f)) { if(a>0)flaq++; if(a<0)flag++; } fwrite(&flag,sizeof(int),1,g); printf("%d ",flag); while(fread(&a,sizeof(int),1,f)) { if(a!=0)fwrite(&a,sizeof(int),1,g); printf("%d ",a); } fwrite(&flaq,sizeof(int),1,g); printf("%d",flaq); fclose(f); fclose(g); getch(); return 0; }
Решение задачи: «Найти ошибку в реализации файлового ввода-вывода»
textual
Листинг программы
.... while(fread(&a,sizeof(int),1,f)) { if(a>0)flaq++; if(a<0)flag++; } fwrite(&flag,sizeof(int),1,g); printf("%d ",flag); fseek(f,0,SEEK_SET);//! while(fread(&a,sizeof(int),1,f)) { if(a!=0)fwrite(&a,sizeof(int),1,g); printf("%d ",a); } ....
Объяснение кода листинга программы
- В цикле, пока файл
f
не пуст (fread
возвращает1
), выполняются следующие действия:- Переменная
a
читается из файлаf
как целое число (типаint
). - Если
a
больше0
, то переменнаяflaq
увеличивается на1
. - Если
a
меньше0
, то переменнаяflag
увеличивается на1
. - Данные из файла
f
записываются в файлg
как целое число (типаint
). - Выводится значение переменной
flag
с пробелом в конце. - Файловый указатель
f
возвращается к началу файла (SEEK_SET
,0
). - В цикле, пока файл
f
не пуст (fread
возвращает1
), выполняются следующие действия:- Переменная
a
читается из файлаf
как целое число (типаint
). - Если
a
не равно0
, то данные из файлаf
записываются в файлg
как целое число (типаint
). - Выводится значение переменной
a
с пробелом в конце. Таким образом, в первой части кода ищется положительное число, во второй - неравное нулю.
- Переменная
- Переменная
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д