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

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

27.10.2012, 15:53. Просмотров 386. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 15:53
Ответы с готовыми решениями:

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

Считывание с файла и запись в файл
как считать и записать данные с файла , с расширением txt?

Считывание и запись матрицы в файл
Нужно написать 2 функции: 1) для считывание одномерной марицы из файла для дальшей работы с ним...

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

Задачка на считывание и запись чисел в файл
Доброго времени! Помогите с задачкой. Задачка на поиск данных в файле: &quot;Осуществить: 1 –...

2
Байт
Эксперт C
20473 / 12998 / 2733
Регистрация: 24.12.2010
Сообщений: 27,200
27.10.2012, 16:17 2
Замени цикл while {...} (85-89) на do {....} while
0
lowercase
212 / 201 / 85
Регистрация: 09.05.2012
Сообщений: 494
27.10.2012, 16:47  [ТС] 3
не помогло

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

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

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

Запись текста в файл\вывод его на экран\сохранение\считывание информации из файла
Ввести текст произвольного содержания в память ПЭВМ. Вывести на экран. Записать текст в файл. ...

Считывание из входного файла байт с N1 по N2 и с N3 по N4 и запись этих байт в выходной файл
Здравствуйте!Помогите пожалуйста написать программу, которая бы считывала из входного файла байты с...


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

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

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