Тема: обмін даними в файлах
Ось повне завдання:
Запишіть в файл nf чисел типу float, прочитайте число з позицій nf-3. Після цього допишіть в файл ncданних типу char, прочитайте цей з nc / 4 позиції. Допишите в файл ni чисел типу int. Прочитайте число з позиції ni-3. Для перевірки лічені дані вивести на екран. Роздрукуйте вміст файлу - всі введені дані повинні бути присутніми в файлі. У процесі введення-виведення даних використовуйте функції роботи з файлом fopen, fseek, ftell, rewind, fgetpos, fsetpos, fclose.
Ось код:
#include<stdio.h>
#include<conio.h>
void main() {
int nf, nc, ni;
int mf[20], fn;
char mc[20], cn;
float mi[20], in;
FILE *fp;
fp = fopen("files.txt", "w+");
if (fp == NULL) {
printf("file can not be opened: error \n");
return;
}
fflush(stdin);
rewind(fp);
printf("\tinput: nf - number of float :\nnf= ");
scanf("%f", &nf);
printf("Enter float data\n");
for (int i=0; i < nf; i++) {
mf[i] = getche();
}
puts(" ");
for (int i=0; i < nf; i++) {
printf("%f ", mf[i]);
fprintf(fp, "%f", mf[i]);
}
fseek(fp, (nf-3), SEEK_SET);
fscanf(fp, "%f", &fn);
printf("\nRead off float: %f\n", fn);
rewind(fp);
fseek(fp, nf, SEEK_SET);
printf("\tinput: nc - number of char:\nnc= ");
scanf("%c", &nc);
printf("Enter char data\n");
for (int i=0; i < nc; i++) {
scanf("%c", &mc[i]);
}
for (int i=0; i < nc; i++) {
printf("%c ", mc[i]);
fprintf(fp, "%c ", mc[i]);
}
if ((nc %4)) { fseek(fp, nf*3 * (nc / 4), SEEK_SET); }
else fseek(fp, nf*3 * (nc / 4) - 1, SEEK_SET);
fscanf(fp, "%c", &cn);
printf("\nRead off char: %c\n", cn);
rewind(fp);
p:printf("\tinput: ni - number of int :\n!!!ni>3!!!\nni= ");
scanf("%d", &ni);
if (ni <= 3) { printf("\nError.Try again\n"); goto p; }
printf("Enter int data\n");
for (int i = 0; i < ni; i++) {
scanf("%d", &mi[i]);
}
rewind(fp);
fseek(fp, 3+ nc + nf, SEEK_SET);
for (int i = 0; i < ni; i++) {
printf("%d ", mi[i]);
fprintf(fp, "%d", mi[i]);
}
fseek(fp, 8 * (ni -4) + nf + 3 + nc, SEEK_SET);
fscanf(fp, "%d", &in);
printf("\nRead off int: %d\n", in);
printf("All read off elements: %df, %c, %d", fn, cn, in);
fclose(fp);
_getch();
}
не можу зрозуміти де помилки, але виводить не зовсім те що треба
Допоможіть, будь ласка, їх знайти і підкажіть як їх виправити