Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
1

Определить - некорректная запись в файл или считывание

27.10.2012, 15:53. Просмотров 496. Ответов 2
Метки нет (Все метки)

Здраствуйте. Написал програму для записи структур в файл а потм считывания и вывода на екрн. Но получается так что после создания файла програма выводит вместо n записей n + 1, дублируя последнню запись. Я вот не пойму в чем проблема - вроде все правильно, а лишняя информация откудато бертся
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <stdio.h>
#include <stdlib.h>
typedef struct {
    int id;
    char
        owner[64],
        brand[32],
        reg_num[16];
    int insp_yaer; 
} CAR;
 
CAR* createNewCar();
CAR* inputSingleCar(CAR*);
void showSingleCar(CAR*);
FILE* createFile(char*, int);
void showAllRecors(FILE*);
 
int main(){
    char* fn = "C:\\file.dat";
    FILE* f = createFile(fn, 2);
    system("pause");
    system("cls");
    showAllRecors(f);
    system("pause");
    fclose(f);
    return 0;
}
CAR* createNewCar(){
    CAR* c = (CAR*)malloc(sizeof(CAR));
    c->owner[0] = 0;
    c->brand[0] = 0;
    c->reg_num[0] = 0;
    c->insp_yaer = 0;
    return c;
}
 
CAR* inputSingleCar(CAR* c){
    fflush(stdin);
    printf("Enter the owner's name:");
    gets(c->owner);
    printf("Enter the car brand:");
    gets(c->brand);
    printf("Enter the registration number:");
    gets(c->reg_num);
    printf("Enter the year of passing inspection. If not, enter 0:");
    scanf("%d", &c->insp_yaer);
    return c;
}
 
void showSingleCar(CAR* c){
    printf("Owner: %s\n", c->owner);
    printf("Car brand: %s\n", c->brand);
    printf("Registration number: %s\n", c->reg_num);
    if(c->insp_yaer) {
        printf("Technical inspection was passed in %d year\n", c->insp_yaer);
    } else {
        printf("Technical inspection was not passed\n");
    }
}
FILE* createFile(char* filename, int n){
    int i;
    FILE* f;
    if(!(f = fopen(filename, "w+b"))){
        return 0;
    } else {
        CAR* c = createNewCar();
        printf("Making file of %d recods\n", n);
        system("pause");
        for(i = 1; i <= n; i++){
            system("cls");
            printf("Enter data for record #%d:\n", i);
            c = inputSingleCar(c);
            fwrite(c, sizeof(CAR), 1, f);
        }
        free(c);
        rewind(f);
        return f;
    }
}
 
void showAllRecors(FILE* f){
    CAR* c = createNewCar();
    int i = 1;
    while(!feof(f)){
        fread(c, sizeof(CAR), 1, f);
        printf("  The record #%d\n", i++);
        showSingleCar(c);
    }
    rewind(f);
    free(c);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2012, 15:53
Ответы с готовыми решениями:

Некорректная запись в файл
Столкнулся с непонятной проблемой. Есть строка которая содержит шифрованные символы...

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

Некорректная запись в файл
Код должен для примера записывать логин и пароль, затем разбивать их построчно и сравнивать при...

Некорректная запись в файл
Помогите, пожалуйста, разобраться с кодом. Задание по нахождению большего значения объема шарового...

2
Эксперт C
23477 / 14718 / 3098
Регистрация: 24.12.2010
Сообщений: 31,389
27.10.2012, 16:17 2
Замени цикл while {...} (85-89) на do {....} while
0
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
27.10.2012, 16:47  [ТС] 3
не помогло

Добавлено через 33 секунды
наверное дело в createFile

Добавлено через 14 минут
хотя нет. sizeof(CAR) дает 120. размер файла с двумя записями - 240 байт, но выводит 3 записи, значит чтото не то при выводе
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2012, 16:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Некорректная запись в файл
Добрый день. Я выполнял задание по лабораторной работе &quot;Из текста, расположенного в файле,...

Некорректная запись в файл
Всем привет, столкнулся с проблемой Есть код, найденный на просторах данного форума и немного...

Некорректная запись в файл
задача - считать из файла1 тхт текст, ввести длину строки и записать в файл2.тхт этот же текст в...

Некорректная запись кириллицы в файл
Здравствуйте! Подскажите, пожалуйста, как можно исправить (и можно ли вообще) вот такую ошибку: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.