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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Петренко
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 11
#1

[C++] Работа с файлами - C++

17.05.2009, 17:26. Просмотров 1199. Ответов 10
Метки нет (Все метки)

Прошу помочь с программой, программа - типа банк и его базы данных. Все вроде работает, но 1 проблемка, когда я ввожу данные о кол-ве побед и поражений (прогу хотел сделать с друзьями в покер играть, данные туда заносить), прога записывает все с нуля, т.е. допустим я вчера записал, то что у меня 1 победа и 0 поражений, закрыл программу (!), затем открываю, записываю 1 поражение, просматриваю статистику и у меня в ней записано 0 побед и 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
#include <iostream>
#include <stdio.h>
int main(void)
{
    FILE *f;
    int a, b, ch, i, wi, lo, w=0, l=0;
    char name[20], nick[25], s4et[25], mon[10], filen[20];         
    for(;;)
    {
    printf("\n„®Ўа® Ї®¦*«®ў*вм ў Ў**Є. ‚лЎЁаЁвҐ Їг*Єв ¬Ґ*о:\n1. “Їа*ў«Ґ*ЁҐ бзҐв®¬\n2. ‘ЇЁб®Є бЇ®*б®а®ў\n3. ‚л室 \n:> "); /*Вывод меню*/
    scanf("%d", &b);
    if(b==1)
    {
            printf("\n1. ђҐЈЁбва*жЁп бзҐвa\n2. Џа®б¬®ва бгйҐбвўгойЁе бзҐв®ў\n3. ЋЇҐа*жЁЁ б бзҐв®¬\n:> "); //Подменю
            scanf("%d", &b);
            if(b==1)
            {
               printf("‚ўҐ¤ЁвҐ Ё¬п д*©«a\n:> "); //Первый пункт подменю - Создание файла
               scanf("%s", &filen);    
               printf("\nC®§¤**ЁҐ бзҐвa...\n"); //Ввод имени файла (с расширением)
               f = fopen(filen, "at");
               printf("‚ўҐ¤ЁвҐ Ё¬п\n:> "); //Ввести имя владельца
               scanf("%s", &name);
               printf("‚ўҐ¤ЁвҐ *ЁЄ\n:> "); //Ник владельца
               scanf("%s", &nick);
               printf("‚ўҐ¤ЁвҐ бзҐв\n:> "); //Номер счета 
               scanf("%s", &s4et);
               printf("‘㬬a ¤Ґ*ҐЈ\n:> "); //Начальная сумма денег
               scanf("%s", &mon);              
               fprintf(f, "?¬п: %s  ЌЁЄ: %s  Ќ®¬Ґа бзҐвa: %s  „Ґ*мЈЁ *a бзҐвг: %s  Џ®ЎҐ¤л: %d  Џ®а*¦Ґ*Ёп: %d\n", name, nick, s4et, mon, w, l); //Запись всех введенных данных в файл (w и l - число побед и поражений, изначально равны 0)
               fclose(f);
               continue;
               }
               else
               {
                   if(b==2)
                   {
                           FILE *f;
                           printf("‚ўҐ¤ЁвҐ Ё¬п д*©«a\n:> "); //Второй пункт подменю - просмотр файла, ввод имени файла (с расширением)
                           scanf("%s", filen);
                           f = fopen(filen, "rt");
                           if(f==NULL) //Если f=NULL - вывести "Error" и издать звук
                           {
                                           printf("Error #1\a\a\n");
                                           system("PAUSE");
                                           return 1;
                           }               
                           while(feof(f) == 0)
                           {
                           ch=getc(f);
                           printf("%c", ch);
                           }                           
                           printf("\n");
                           continue;
               }
               else
               {
               if(b==3)
               {
                       printf("‚л гбЇҐи*® ў®и«Ё ў бЁб⥬г!\n"); //Пункт подменю №3 - операции с существующим файлом
                       printf("‚ўҐ¤ЁвҐ Ё¬п д*©«a\n:> "); //Ввод имени файла (с расширением)
                       scanf("%s", filen);
                       printf("Џа®Ё§ў®¦г §*Јаг§Єг д*©«*a Ў*§л ¤***ле... \n...99... 100%\n‡*Јаг§Єa гбЇҐи*® §*ўҐаиҐ*a!\n");
                       f = fopen(filen, "at");
                       fscanf(f, "%s %d %d", mon, w, l);
                       printf("‚ўҐ¤ЁвҐ б㬬㠢*иЁе ¤Ґ*ҐЈ *a ¤***л© ¬®¬Ґ*в\n:> "); //Ввод суммы денег на данный момент
                       scanf("%s", &mon);
                       printf("ЏаЁ Ї®ЎҐ¤Ґ **¦¬ЁвҐ 1, ЇаЁ Ї®а*¦Ґ*ЁЁ - 0\n:> "); //При победе нажать 1, поражении - 0
                       scanf("%d", &wi);
                       printf("ЏаЁ Ї®а*¦Ґ*ЁЁ **¦¬ЁвҐ 1, ЇаЁ Ї®ЎҐ¤Ґ - 0\n:> "); //При поражении нажать 1, победе 0
                       scanf("%d", &lo);
                       if(wi==1 && lo==0)
                       {
                                w=+1;
                       }
                       else
                       {
                           if(wi==0 && lo==1)
                           {
                                    l=+1;
                           }
                       }
                       fprintf(f, "„Ґ*мЈЁ *a бзҐвг: %s  Џ®ЎҐ¤л: %d  Џ®а*¦Ґ*Ёп: %d\n", mon, w, l); //Запись в файл суммы денег, информации и игре
                       fclose(f);
               continue;
               }
               }
               }
               }
               else
               {
                   if(b==2)
                   {
                           printf("\n’гв Ўг¤гв бЇ®*б®ал\n\n"); //Пункт №2 главного меню - показ спонсоров
                           system("PAUSE");
                           printf("\n\n");
                           continue;
                           }
                   else
                   {
                       if(b==3) //Пункт №3 главного меню - выход
                       {
                               return 1;
                       }
                   else
                   {
                       if(b!=1 || b!=2 || b!=3) //Если в главном меню набрана цифра не равная 1, 2, 3 - издать звук и написать "Error"
                       {
                               printf("Error #2\a\a\a\a\n\n");
                               system("PAUSE");
                               return 1;
                       }
                   }
                   }
}    
}         
               system("PAUSE");
               return 1;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2009, 17:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос [C++] Работа с файлами (C++):

Работа с файлами С++ - C++
Написать программу для сжатия какого-либо файла в 2 раза.

Работа с файлами - C++
Здравствуйте. В моей программе нужно зашифровать файл любого расширения, например jpg (я взял). Проблема в том, что: значения которые я...

Работа с файлами - C++
Дан файл File_in.dat, содержащий 65536 целых чисел. Считать из файла 9 чисел начиная с 150-го. Сформировать из них матрицу A(3х3) и...

Работа с файлами - C++
Почему программа не читает из файла матрицу, а просто выводит мне пустую консоль? #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include...

Работа с файлами - C++
Задание звучит так: каждая строка файла содержит такую последовательность символов: a#b, где a,b - целые числа, #-одна из арифметических...

работа с файлами - C++
1. Дан текстовый файл, фразы в котором отделены друг от друга точками, а слова – пробелами и знаками препинания. Удалить из этого файла все...

10
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.05.2009, 04:57 #2
а зачем имя файла вводить, нужно хранить всё в установленном, данные записываешь в файл, а потом файл читаешь
максимум - можно для каждого имени создавать файл и потом с имени открывать файл (с недопустимостью двух одинаковых имён)
0
Петренко
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 11
18.05.2009, 14:01  [ТС] #3
допустим, вот только помог бы сделать
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.05.2009, 06:46 #4
тут неясно какой файл там текстовый в итоге и как должна работать программа (как конкретно, а то что-то в общих чертах, может быть и понял бы, если бы кракозябры по-русски были написаны)
0
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
19.05.2009, 10:10 #5
Петренко, перепечатай кракозябры вручную или копипасть с нормальной кодировкой
0
Петренко
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 11
19.05.2009, 14:51  [ТС] #6
Это вообще значения НЕ имеет, я прошу ведь не текст править
0
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
19.05.2009, 14:57 #7
Тогда выражусь понятней, никто не будет рыцать в непонятном коде, а чтобы понять смысл ТВОЕЙ реализации, нужно знать, что ты писал. Иначе люди просто не поймуть о чем речь, к тому же в России живут ленивые люди, так что если хочешь чтоб те помогли, приложи к этому усилия
0
Петренко
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 11
19.05.2009, 15:34  [ТС] #8
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
#include <iostream>
#include <stdio.h>
int main(void)
{
    FILE *f;
    int a, b, ch, i, wi, lo, w=0, l=0;
    char name[20], nick[25], s4et[25], mon[10], filen[20];         
    for(;;)
    {
    printf("\nДобро пожаловать в банк. Выбирите пункт меню:\n1. Управление счетом\n2. Список спонсоров\n3. Выход\n:> "); /*Вывод меню*/
    scanf("%d", &b);
    if(b==1)
    {
            printf("\n1. Регистрация счет\n2. Просмотр существующего счета\n3. Операции со счетом\n:> "); //Подменю
            scanf("%d", &b);
            if(b==1)
            {
               printf("Введите имя файла\n:> "); //Первый пункт подменю - Создание файла
               scanf("%s", &filen);    
               printf("\nСоздание файла\n"); //Ввод имени файла (с расширением)
               f = fopen(filen, "at");
               printf("Введите имя\n:> "); //Ввести имя владельца
               scanf("%s", &name);
               printf("Введите ник\n:> "); //Ник владельца
               scanf("%s", &nick);
               printf("Номер счета\n:> "); //Номер счета 
               scanf("%s", &s4et);
               printf("Введите сумму денег\n:> "); //Начальная сумма денег
               scanf("%s", &mon);              
               fprintf(f, "Имя: %s  Ник: %s  Номер счета: %s  Деньги: %s  Победы: %d  Поражения: %d\n", name, nick, s4et, mon, w, l); //Запись всех введенных данных в файл (w и l - число побед и поражений, изначально равны 0)
               fclose(f);
               continue;
               }
               else
               {
                   if(b==2)
                   {
                           FILE *f;
                           printf("Введите имя файла\n:> "); //Второй пункт подменю - просмотр файла, ввод имени файла (с расширением)
                           scanf("%s", filen);
                           f = fopen(filen, "rt");
                           if(f==NULL) //Если f=NULL - вывести "Error" и издать звук
                           {
                                           printf("Error #1\a\a\n");
                                           system("PAUSE");
                                           return 1;
                           }               
                           while(feof(f) == 0)
                           {
                           ch=getc(f);
                           printf("%c", ch);
                           }                           
                           printf("\n");
                           continue;
               }
               else
               {
               if(b==3)
               {
                       printf("Добро пожаловать в систему!\n"); //Пункт подменю №3 - операции с существующим файлом
                       printf("Введите имя файла\n:> "); //Ввод имени файла (с расширением)
                       scanf("%s", filen);
                       printf("Выполняю загрузку\n...99... 100%\nЗагружено!\n");
                       f = fopen(filen, "at");
                       fscanf(f, "%s %d %d", mon, w, l);
                       printf("Введите сумму денег на данный момент\n:> "); //Ввод суммы денег на данный момент
                       scanf("%s", &mon);
                       printf("Вы победили?\n:> "); //При победе нажать 1, поражении - 0
                       scanf("%d", &wi);
                       printf("Вы проиграли?\n:> "); //При поражении нажать 1, победе 0
                       scanf("%d", &lo);
                       if(wi==1 && lo==0)
                       {
                                w=+1;
                       }
                       else
                       {
                           if(wi==0 && lo==1)
                           {
                                    l=+1;
                           }
                       }
                       fprintf(f, "Деньги: %s  Победы: %d  Поражения: %d\n", mon, w, l); //Запись в файл суммы денег, информации и игре
                       fclose(f);
               continue;
               }
               }
               }
               }
               else
               {
                   if(b==2)
                   {
                           printf("\Тут будут спонсоры...\n\n"); //Пункт №2 главного меню - показ спонсоров
                           system("PAUSE");
                           printf("\n\n");
                           continue;
                           }
                   else
                   {
                       if(b==3) //Пункт №3 главного меню - выход
                       {
                               return 1;
                       }
                   else
                   {
                       if(b!=1 || b!=2 || b!=3) //Если в главном меню набрана цифра не равная 1, 2, 3 - издать звук и написать "Error"
                       {
                               printf("Error #2\a\a\a\a\n\n");
                               system("PAUSE");
                               return 1;
                       }
                   }
                   }
}    
}         
               system("PAUSE");
               return 1;
}
Добавлено через 2 минуты 22 секунды
Типо таг?
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.05.2009, 05:43 #9
вот, нужно данные игроков хранить в одном файле

C
1
2
3
4
5
6
7
8
struct igrok {
    char name[100];
    char nick[100];
    char s4et[100];
    int  mon;
    int  win;
    int  los;
} someone;
эта структура временно хранит данные игрока, с неё потом формируется и файл вывода

то есть ты заносишь данные в эту структуру вопросами, потом эту структуру записываешь в общую базу (добавляешь - это fopen("database", "ab") )
потом, загружая всех игроков из этой базы в массив таких структур, ты сможешь их сортировать в массиве, или искать игрока в массиве
вот, и отдельно уже делаешь сохранение их файлов (это может быть и один файл для всех результатов в удобочитаемом виде, а может быть как у тебя - для каждого игрока отдельный файл, имя которого будет браться из someone.name )
C
1
2
3
    char filename[100];
 
    sprintf(filename, "%s%s", someone.name, ".txt");
потом fopen(filename, "w") и по новой каждый раз пишешь, чтобы старые результаты там переписывались новыми (они будут браться из общей базы и подсчитываться, пока находятся в массиве структур в программе, там же нужно победы складывать и поражения тоже)

то есть не нужно делать то, с чем работает программа и то, что потом будет читать человек, в одном флаконе
потому что читать иногда вообще проще через fread (это непрерывно загрузит одну запись для одного игрока по байтам, не различая где там имя где результат, главное надёжно), а уже потом в прочитанном к элементам структуры обращаться и они будут сами знать сколько байт занимают

и у тебя здесь не одно меню, а два - нужно написать две функции (они тогда получатся маленькие и понятные), если ещё и каждый пункт меню оформить как функцию, тогда программа начнёт разделяться на части (будет становится понятнее и многие участки можно будет совершенствовать или заменять целыми блоками)
например, в функции сохранения в файл (для одного игрока) можно вызвать функцию подсчёта всех результатов, а можно не вызывать её и от этого изменится вывод (там либо будет дописан общий результат, либо нет) - это проще, чем внутри программы где-то что-то менять, что может повлиять на другие свойства вывода (тут просто - одно строку закомментил и программа по-другому работает и тоже правильно)

в общем базу данных отдельно, файлы результатов отдельно, так как первое удобно обрабатывать, а второе удобно читать потом
1
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.05.2009, 10:12 #10
попробовал через fread fwrite, база получается большой и непонятной, теперь пишет просто и базу можно руками править

создаёт базу, добавляет в неё записи, а потом читает базу и для каждой записи создаёт её файл
1
Вложения
Тип файла: zip igroki.tar.zip (1.4 Кб, 13 просмотров)
Петренко
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 11
20.05.2009, 15:00  [ТС] #11
спасибо
0
20.05.2009, 15:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2009, 15:00
Привет! Вот еще темы с ответами:

Работа с файлами - C++
Нужно записать с одного файла в другой на С++ Добавлено через 46 минут ап ап ап

Работа с файлами - C++
Здравствуйте,помогите Написать программу, которая работает в одном из двух режимов. Если в те¬кущем каталоге имеется текстовый файл...

Работа с файлами - C++
Здравствуйте,помогите пожалуйста с решением задачи, Каждая строка текстового файла содержит название города и число его жи-телей. Используя...

работа с файлами - C++
Пожалуйста помогите исправить программу. Необходимо написать программу которая бы создавала файл с числами. Затем все числа которые делятся...


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

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

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