Форум программистов, компьютерный форум CyberForum.ru

у меня есть прога. но минус в том, что она не сохраняет файл( - C++

Восстановить пароль Регистрация
 
vitaliypro
1 / 1 / 0
Регистрация: 09.09.2013
Сообщений: 125
15.09.2013, 16:56     у меня есть прога. но минус в том, что она не сохраняет файл( #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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#include <stdio.h> // Подключение головного файла для работы с вводом/выводом
#include <windows.h> // Подключение головного файла для работы с WinAPI
 
typedef struct magi ne;
 
struct magi { // Структура с именем magi
 
    int day; short month; int year;  // дата
    int nom_mag; int nom_sect; int nom_chek; // информация о магазине и чеке
    char name_tov[20]; char art_tov[10]; float price_tov; float kol_tov; // информация о товаре
 
    ne *next; // Указатель
};
 
ne* readfile(FILE *f)
{
    ne *tmp = (ne*) malloc(sizeof(ne));
    ne *stmp, *start;
    if (!fread(tmp, sizeof(ne), 1, f)) return 0;
    stmp = start = tmp;
    while (1)
    {
        tmp = (ne*) malloc(sizeof(ne));
        if (!fread(tmp, sizeof(ne), 1, f)) break;
        stmp -> next = tmp; // Указатель предыдущего элемента указывает на считанную запись
        stmp = tmp; // "Временная" переменная теперь хранит адрес считанного элемента
 
    }
    stmp->next = 0;
    return start;
}
 
ne* addel(ne *start)
{
    int num;
    if (start) {printf(" После какого элемента следует добавить (0 - начало списка): ");
    scanf("%d", &num);} // запрос номера, если есть элементы
    system("cls");
    fflush (stdin);
    ne *temp = (ne*) malloc(sizeof(ne));
 
    printf(" Введите название товара: ");
    gets ( temp->name_tov);
 
    printf(" Введите артикуль товара: ");
    gets ( temp->art_tov);
 
    printf(" Введите номер магазина: ");
    scanf ("%d", &temp->nom_mag);                       // ввод данных
 
    printf(" Введите номер секции: ");
    scanf("%d", &temp->nom_sect);
 
    printf(" Введите номер чека: ");
    scanf("%d", &temp->nom_chek);
 
    printf(" Введите цену товара: ");
    scanf("%f", &temp->price_tov);
 
    printf(" Введите количество товара: ");
    scanf("%f", &temp->kol_tov);
 
    printf (" Введите день: ");
    scanf ("%d", &temp->day);
 
    printf (" Введите месяц: ");
    scanf ("%d", &temp->month);
 
    printf (" Введите год: ");
    scanf ("%d", &temp->year);
 
 
    if (!start) {start = temp;
        start->next = 0; return start;}         // если первый элемент
    ne *tmp = start;
    if (!num) {temp->next = start; start=temp; return start;}       // вставляем в начало
    if (tmp->next == 0) {tmp->next = temp; tmp->next->next = 0; return start;}  // если вставляем в конец
    else {
    int i = 1;
    while (i != num) {tmp = tmp->next; i++;}
        ne *kj = tmp->next;
        tmp->next=temp;
        tmp -> next -> next = kj;                           // вставляем в середину
 
        delete(kj);
    }
    return start;
 
}
 
ne* delel(ne *start)
{
    int num;
    fflush (stdin);
    if (!start) return 0;
    printf("Введите номер магазина, данные о котором требуется удалить: ");
    scanf("%d", &num);
    if (num == 1) start = start -> next;
    else
        {
            ne *temp = start;
            int i=1;
            while (i != --num) {temp = temp -> next; i++;};
            if (temp -> next -> next == 0 ) temp -> next = 0;
            else temp -> next = temp -> next -> next;
        }
        return start;
}
 
ne* onscreen(ne *start)
{
  while(1)
  {
    system("cls");
    if (!start) printf(" Список пуст !!!   "); else
    {
 
        printf(" \n");
        int n=1;
        for (int i=0; i < 63; i++) printf ("\xC4");
        printf ("\n");
        ne *temp = start;
        while (temp)
        {
             printf ("номер - %d \n", n++);
 
             printf ("имя товара - %s \n", temp->name_tov);
             printf ("артикуль товра - %s \n", temp->art_tov);
 
             printf ("номер магазина - %d \n", temp->nom_mag); // ввод данных
             printf ("номер секции - %d \n", temp->nom_sect);
             printf ("номер чека - %d \n", temp->nom_chek);
 
             printf ("цена товара - %f \n", temp->price_tov);
             printf ("количество товара %f \n", temp->kol_tov);
 
             printf ("день - %d \n", temp->day);
             printf ("месяц - %d \n", temp->month);
             printf ("год - %d \n", temp->year);
 
             temp = temp -> next;
        }
        for (int i=0; i < 63; i++)
            printf ("\xC4");
        printf ("\n");
    }
    fflush (stdin);
    printf ("\n 1 - Добавить элемент");
    printf ("\n 2 - Удалить элемент");
    printf ("\n 3 - Выход в меню");
    printf ("\n Ваш выбор: ");
    char q = getchar ();
    switch (q)
    {   case '1': {start = addel(start); break;}
        case '2': {start = delel(start); break;}
        case '3': {return start;}
    }
  }
}
 
void writefile(ne *beg, FILE *f)
{
    rewind(f);
    ne *temp = beg;
    while (temp)
    {
        fwrite(temp, sizeof(ne), 1, f);
        temp = temp -> next;
    }
}
 
 
int main () {
   FILE *f = fopen ("base.bin", "r+w"); // Переменная-указатель, открывает файл с записями в режиме чтения и записи
    if (!f) { // Если не удалось открыть файл
        f = fopen ("base.bin", "w+b"); // Создаем файл
        if (!f) { // Если файл не удалось создать
            puts ("Ошибка! "); // Выводим соответствующее сообщение
            return 1; // Досрочно завершаем выполнение программы
        }
    }
    ne *beg=readfile (f);
    while (1) { // Вечный цикл, необходим для вывода меню на дисплей
        system ("cls"); // Очищаем консоль
        puts (" Выберите пункт меню:");
        puts (" 1. Просмотреть таблицу, удалить, добавить элемент");
        puts (" 2. Выход и сохранение изменений в файл");
        printf ("\nВаш выбор: ");
        char c = getchar (); // Считываем символ
        switch (c) { // Исходя из значения считанного символа, выбираем
 
            case '1': beg = onscreen (beg); break; // Вывод данных на дисплей
            case '2': {f = fopen ("base.bin", "w+b"); writefile(beg, f); return 0; break;} // Выход и сохранение изменений
        }
    }
}



//вот короче она. не могу найти ошибку
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 16:56     у меня есть прога. но минус в том, что она не сохраняет файл(
Посмотрите здесь:

C++ Ввести с клавиатуры фамилию и задать букву на поиск (любую) тогда вывести ее на экран если он есть, а если нет то сообщение что она отсутствует.
Вот часть кода, в нем я должен сделать если я ничего не ввожу то чтоб вывело сообщение о том что пользователь не ввел данных, но у меня не выходит C++
есть ошибки в программе, может что то с компилятором у меня, подскажите пожалуйста. C++
В целочисленном массиве найти число чередований знака, то есть число переходов с минуса на плюс или с плюса на минус. C++
Есть натуральное число n. Проверить, есть ли в том числе 3 одинаковых цифры C++
Программа создает бинарный файл, но не сохраняет его в формате .bin, что делать?! C++
код с++. где что поставить что бы прога норм работала? C++
C++ У меня не работает прога запрограмированная на Численные методы!

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
15.09.2013, 16:59     у меня есть прога. но минус в том, что она не сохраняет файл( #2
Выделяйте код тегами, иначе не читабельно
vitaliypro
1 / 1 / 0
Регистрация: 09.09.2013
Сообщений: 125
15.09.2013, 17:16  [ТС]     у меня есть прога. но минус в том, что она не сохраняет файл( #3
чуть чуть не понял Вас(((( о чем вы?
Yandex
Объявления
15.09.2013, 17:16     у меня есть прога. но минус в том, что она не сохраняет файл(
Ответ Создать тему
Опции темы

Текущее время: 23:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru