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

Запись в файл и вывод структуры через под программы - C++

Восстановить пароль Регистрация
 
Ironhide7
 Аватар для Ironhide7
0 / 0 / 0
Регистрация: 01.06.2012
Сообщений: 17
01.06.2012, 22:12     Запись в файл и вывод структуры через под программы #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
# include<string.h>
# include<windows.h>
# include <graphics.h>
# include<fstream.h>
#include<iomanip.h>
# include <stdio.h>
# include <conio.h>
# include <process.h>
int const n=3;
 
struct magazine
    {char name[10];
     char strana[30];
     int chena;
     int kolvo;
     int vothrast_ot;
     int vothrast_do;
    };
 
int FF;
 
void outputmenu();
 
void vvod_dannix() ;
 
void ot_1_do_3();
void deh_igr();
void poisk();
void dannie();
 
void main()
{
do{
outputmenu();
gotoxy(5,8);
cout<<" ‚лЎҐаҐвҐ Їг*Єв: ";
cin>>FF;
 clrscr();
  switch(FF)
     { case 1: vvod_dannix();  break;
       case 2: ot_1_do_3(); break;
       case 3: deh_igr(); break;
       case 4: poisk(); break;
       case 5: dannie(); break;
       default: ;
} } while(FF!=6);
 
 
}
 
 
void outputmenu()
{ int ff; char gg;
textcolor(1);
textbackground(1);
window(1,1,80,80);
 clrscr();
 window(3,3,77,23);
 textbackground(0);
 clrscr();
 gotoxy(5,2);
printf("1) ввод данных");
gotoxy(5,3);
printf("2) игрушки от 1 до 3");
gotoxy(5,4);
printf("3) самая дешевая игрушка");
gotoxy(5,5);
printf("4) поиск определенной игрушки");
gotoxy(5,6);
printf("5) показать базу данных");
gotoxy(5,7);
printf("6) Vixod");
}
 
 
void vvod_dannix()
{ FILE *f; int i;
     magazine shop[n];
  f=fopen("kurs.txt","w");
for(i=0; i<n; i++)
{
    gotoxy(5,2);
    printf("name:"); scanf("%s", &shop[i].name);
    gotoxy(5,3);
    printf("strana:"); scanf("%s", &shop[i].strana);
    gotoxy(5,4);
    printf("chena:"); scanf("%d", &shop[i].chena);
    gotoxy(5,5);
    printf("kolvo:"); scanf("%d", &shop[i].kolvo);
    gotoxy(5,6);
    printf("vothrast ot:"); scanf("%d", &shop[i].vothrast_ot);
    gotoxy(5,7);
    printf("vothrast do:"); scanf("%d", &shop[i].vothrast_do);
    clrscr();
fwrite(&shop,sizeof(struct magazine),1,f);
clrscr();}
fclose(f);
 }
 
 
 
void ot_1_do_3()
{
FILE *f; int i,q;   magazine shop[n];
///f=fopen("kurs.txt","r");
while(1){if(!fread(&shop,sizeof(struct magazine),1,f)){printf("end");break;}
}
q=0;
printf("\n\n\n igrushki cootvetctvyushie vothrastu ot 1 do 3: \n");
for (i=0;  i<n; i++)
{if((shop[i].vothrast_ot>=1)&&(shop[i].vothrast_do<=3))
      printf("name:%s,strana:%s,chena:%d,kolvo:%d,vothrast_ot:%d, vothrast_do:%d\n",shop[i].name,shop[i].strana,shop[i].chena,shop[i].kolvo,shop[i].vothrast_ot, shop[i].vothrast_do);
  else q++; }
if(q==n) printf(" net takoy kategorii vothrasta");
 
getch();
}
 
void deh_igr()
{ int min,i;
magazine shop[n];
min=32766;
for (i=0; i<n; i++)
if(shop[i].chena<min) min=shop[i].chena;
printf("\n\n samayu deshevayu igrushka %d rub\n",min);
}
 
 
void poisk()
{ int A,B,X,i,q; char S;
magazine shop[n];
printf ("\npoisk opredelennoi igrushki\n\n");
printf(" vvedite nachalnyu vothrast:");
scanf("%d",&A);
printf(" \nvvedite konech vothrast:");
scanf("%d",&B);
printf(" \nvvedite cheny X:");
scanf("%d",&X);
printf(" ‚ўҐ¤ЁвҐ бва**г:");
scanf("%s",&S);
printf("\n\niskomay igrushka:\n");
for (q=i=0; i<n; i++)
{ if ((shop[i].vothrast_ot>=A)&&(shop[i].vothrast_do<=B ) &&(shop[i].chena<X)&&(strcmp(shop[i].strana,&S)==0))
    printf("name:%s\n",shop[i].name);
    else   q++;
    }
    if(i==q) printf("игрушка не найдена**");
}
 
 
 
void dannie()
{  FILE *f; int i;
     magazine shop[n];
f=fopen("kurs.txt","r");
while(1){if(!fread(&shop,sizeof(struct magazine),1,f)){printf("end");break;}}
for (i=0; i<n; i++)
 { gotoxy(5,2);
 printf("name:%s,strana:%s,chena:%d,kolvo:%d,vothrast_ot:%d, vothrast_do:%d\n",shop[i].name,shop[i].strana,shop[i].chena,shop[i].kolvo,shop[i].vothrast_ot, shop[i].vothrast_do);
   }
   getch();}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 22:12     Запись в файл и вывод структуры через под программы
Посмотрите здесь:

C++ Запись структуры в файл.
Запись структуры в файл. C++
Запись/вывод структуры в файл C++
Запись структуры в файл C++
Запись структуры в файл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
02.06.2012, 03:13     Запись в файл и вывод структуры через под программы #2
Тяжело разбираться. Во-первых, теги, во-вторых, go to
Пробуй так:
C++
1
2
fwrite((char*)&shop,sizeof(shop[i]),1,f);
fread((char*)&shop,sizeof(shop[i]),1,f);
Ironhide7
 Аватар для Ironhide7
0 / 0 / 0
Регистрация: 01.06.2012
Сообщений: 17
02.06.2012, 14:33  [ТС]     Запись в файл и вывод структуры через под программы #3
Пробовал сделать как вы сказали не помогло. Все также. Меня интересует только первая под программа и последняя остальное пока не важно. Не могу понять почему если запись структуры в файл и вывод структуры из файла находятся в одной подпрограмме то все отлично работает. если в разных подпрограммах выводит символы. Помогите пожалуйста.
Ironhide7
 Аватар для Ironhide7
0 / 0 / 0
Регистрация: 01.06.2012
Сообщений: 17
03.06.2012, 19:03  [ТС]     Запись в файл и вывод структуры через под программы #4
Наконец то я доделал эту программу. Правда есть еще не большие недочеты.
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
# include<string.h>
# include<iomanip.h>
# include <stdio.h>
# include <conio.h>
 
FILE *f; int i; int z,q,A,B,min,X;int k; const n=10; char S;
 
struct magazine
    {
     char name[10];
     char strana[30];
     int chena;
     int kolvo;
     int vothrast_ot;
     int vothrast_do;
    };
 
magazine shop[n];
 
int FF;
 
void outputmenu();
 
void vvod_dannix() ;
 
void ot_1_do_3();
void deh_igr();
void poisk();
void dannie();
 
void main()
{
do{
outputmenu();
gotoxy(5,8);
cout<<" ‚лЎЁаЁвҐ Їг*Єв: ";
cin>>FF;
 clrscr();
  switch(FF)
     { case 1: vvod_dannix();  break;
       case 2: ot_1_do_3(); break;
       case 3: deh_igr(); break;
       case 4: poisk(); break;
       case 5: dannie(); break;
       default: ;
} } while(FF!=6);
 
 
}
 
 
void outputmenu()
{ int ff; char gg;
textcolor(GREEN);
textbackground(GREEN);
window(1,1,80,24);
 clrscr();
 window(2,3,79,23);
 textbackground(0);
 clrscr();
 gotoxy(5,2);
printf("1) ‚ўҐ¤ЁвҐ ¤***лҐ ®Ў *б®авЁ¬Ґ*вҐ");
gotoxy(5,3);
printf("2) ?ЈагиЄЁ ¤«п ¤ҐвҐ© ®в 1 ¤® 3 «Ґв ");
gotoxy(5,4);
printf("3) ‘*¬*п ¤ҐиҐў*п ЁЈагиЄ*");
gotoxy(5,5);
printf("4) Џ®ЁбЄ ®ЇаҐ¤Ґ«Ґ**®© ЁЈагиЄЁ");
gotoxy(5,6);
printf("5) ‚뢥бвЁ ** нЄа** ўҐбм *бб®авЁ¬Ґ*в");
gotoxy(5,7);
printf("6) ‚л室");
}
 
 
void vvod_dannix()
{
if((f=fopen("kurs.txt","w"))==NULL)
{puts("ЌҐ¬®Јг ®вЄалвм д*Ё«!\n"); return;}
clrscr();
 
for(i=0; i<n; i++)
{   gotoxy(5,2);
    printf("¤«п ўл室* ў Ј«*ў*®Ґ ¬Ґ*о  **¦¬ЁвҐ ESC ¤«п Їа®¤®«¦Ґ*Ёп  **¦¬ЁвҐ Enter");
    if(getch()==27)  {i=n;outputmenu();}
    else
    {gotoxy(5,4);
    printf("Ќ*§ў**ЁҐ:"); scanf("%s", &shop[i].name);
    gotoxy(5,5);
    printf("‘ва***:"); scanf("%s", &shop[i].strana);
    gotoxy(5,6);
    printf("–Ґ**:"); scanf("%d", &shop[i].chena);
    gotoxy(5,7);
    printf("Љ®«ЁзҐбвў®:"); scanf("%d", &shop[i].kolvo);
    gotoxy(5,8);
    printf("‚®§а*бв_®в:"); scanf("%d", &shop[i].vothrast_ot);
    gotoxy(5,9);
    printf("‚®§а*бв_¤®:"); scanf("%d", &shop[i].vothrast_do);
    clrscr();
fwrite(&shop,sizeof(struct magazine),1,f);}}
fclose(f);
 }
 
 
 
 
void ot_1_do_3()
{
f=fopen("kurs.txt","r");
while(1){if(!fread(&shop,sizeof(struct magazine),1,f)){printf("end");break;}
}
q=0;
printf("\n\n\n ?ЈагиЄЁ ᮮ⢥вбвўгойЁҐ ў®§а*бвг ®в 1 ¤® 3 : \n");
for (i=0;  i<n; i++)
{if((shop[i].vothrast_ot>=1)&&(shop[i].vothrast_do<=3))
      printf("**§ў**ЁҐ:%s,бва***:%s,жҐ**:%d,Є®«ЁзҐбвў®:%d,ў®§а*бв ®в:%d, ў®§а*бв ¤®:%d\n",shop[i].name,shop[i].strana,shop[i].chena,shop[i].kolvo,shop[i].vothrast_ot, shop[i].vothrast_do);
  else q++; }
if(q==n) printf(" *Ґв ЁЈагиЄЁ ᮮ⢥вбвўго饩 ¤***®¬г ў®§а*бвг");
 
getch();
}
 
 
void deh_igr()
{
min=32766;
q=0;
for (i=0; i<n; i++)
{if(shop[i].chena<min) {min=shop[i].chena; q=i;}}
printf("\n\n б*¬*п ¤ҐиҐў*п ЁЈагиЄ* **§ў**ЁҐ: %s, бва***: %s, жҐ**: %d",shop[q].name,shop[q].strana,min);
getch();
}
 
 
void poisk()
{
printf ("\nЏ®ЁбЄ ЁЈагиЄЁ\n\n");
printf(" ўўҐ¤ЁвҐ **з*«м*®Ґ §**зҐ*ЁҐ ў®§а*бв*:");
scanf("%d",&A);
printf(" \nўўҐ¤ЁвҐ Є®*Ґз*®Ґ §**зҐ*ЁҐ ў®§а*бв*:");
scanf("%d",&B);
printf(" \nўўҐ¤ЁвҐ жҐ*г X:");
scanf("%d",&X);
printf(" ўўҐ¤ЁвҐ бва**г:");
scanf("%s",&S);
printf("\n\n१г«мв*в Ї®ЁбЄ*:\n");
for (q=i=0; i<n; i++)
{ if ((shop[i].vothrast_ot>=A)&&(shop[i].vothrast_do<=B ) &&(shop[i].chena<X)&&(strcmp(shop[i].strana,&S)==0))
    printf("\t**§ў**ЁҐ:%s\n",shop[i].name);
    else   q++;
    }
    if(i==q) printf("?ЈагиЄ* *Ґ **©¤Ґ**");
getch();
}
 
 
 
void dannie()
{q=1;z=2;
 f=fopen("kurs.txt","rt");
while(1){if(!fread(&shop,sizeof(struct magazine),1,f)){printf(" ");break; }
 }
for(i=0; i<n; i++)
{
gotoxy(2,1);
printf("**¦¬ЁвҐ ENTER ¤«п Їа®б¬®ва* б«Ґ¤го饩 з*бвЁ бЇЁбЄ* ЁЈаг襪");
gotoxy(2,z);
printf("**§ў**ЁҐ:%s,бва***:%s,жҐ**:%d,Є®«ЁзҐбвў®:%d,ў®§а*бв ®в:%d, ў®§а*бв ¤®:%d\n",shop[i].name,shop[i].strana,shop[i].chena,shop[i].kolvo,shop[i].vothrast_ot, shop[i].vothrast_do);
if(q%5==0) {getch()==13; clrscr(); z=1;} q++; z++;
}
fclose(f);
getch();
 
 }
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
03.06.2012, 19:13     Запись в файл и вывод структуры через под программы #5
Цитата Сообщение от Ironhide7 Посмотреть сообщение
Наконец то я доделал эту программу. Правда есть еще не большие недочеты.
Например теги форматирования кода и использование go to, что делает код нечитабельным вообще.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
03.06.2012, 19:20     Запись в файл и вывод структуры через под программы #6
Цитата Сообщение от MrGluck Посмотреть сообщение
и использование go to, что делает код нечитабельным вообще
Во-первых, предрассудки по использованию goto - распространенное заблуждение, во-вторых, где вы его тут увидели?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
03.06.2012, 19:35     Запись в файл и вывод структуры через под программы #7
Прошу прощения, перепутал goto() и gotoxy(). Тяжело разбираться в монотонном потоке текста.

Не по теме:

goto рушит иерархию программы. Представьте, если бы в данном коде вместо gotoxy действительно был бы вызов goto. Отследить ход выполнения было бы очень сложно. И почему это заблуждение? Приведите код, где этот оператор действительно необходим. Дейкстра не зря говорил о том, что использование goto опасно. Любой код можно переписать без использования этого оператора. По моему, использование goto = выстрел в ногу.

silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
03.06.2012, 19:54     Запись в файл и вывод структуры через под программы #8
Цитата Сообщение от MrGluck Посмотреть сообщение
Приведите код, где этот оператор действительно необходим
Да пожалуйста:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    for (int i = 0; i < 10; ++i)
    {
        for (int j = 0; j < 10; ++j)
        {
            for (int k = 0; k < 10; ++k)
            {
                if (i * j * k > 100)
                    goto loop_end;
            }
        }
    }
loop_end: ;
    
    return 0;
}
В данном случае чтобы сразу выйти из всех трёх циклов без goto, придётся заводить ключи и проверять их в каждом цикле. В Java даже есть специальный вид операторов break и continue - операторы с меткой. При этом метка может находиться только перед соответствующим циклом и будет означть прерывание (продолжение) этого цикла при применении соответствующей формы оператора.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
03.06.2012, 20:21     Запись в файл и вывод структуры через под программы #9
Хорошо, а если б этот loop_end: находился не сразу после нескольких вложенных циклов?
Каждый раз использовать Ctrl + F? И насколько тяжелее воспринимать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    bool b = true;
    for (int i = 0; i < 10 && b; ++i)
    {
        for (int j = 0; j < 10 && b; ++j)
        {
            for (int k = 0; k < 10 && b; ++k)
            {
                if (i * j * k > 100)
                    b = false;
            }
        }
    }
    
    return 0;
}
?

Да и главная проблема - это возможность как раз "выстрела в ногу".
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
03.06.2012, 20:45     Запись в файл и вывод структуры через под программы #10
MrGluck, любую конструкцию в любом языке программирования можно заставить выстрелить вам в ногу, некоторые из них позволяют сделать многократно и сперва незаметно, но это же не повод от них отказываться? Согласитесь, макросы полезная вещь. А что нам позволяет писать многострочные макросы? Правильно, бекслеш в конце строки. А теперь посмотрим следующий код из поста Почему программисты на C++ и Java плохо относятся к C#?Ведь C# + .NET = очень удобный язык! Все упрощено! И достаточно быстро работают программы на C# и приходим к выводу, что использовать подобное объединение строк - это очень плохо, следовательно "Скажем НЕТ многострочным макросам"

Цитата Сообщение от MrGluck Посмотреть сообщение
Каждый раз использовать Ctrl + F?
а вы писали большие проекты? Я лично писал и пишу и не представляю, как можно писать код и не держать его часть в голове, иногда эта часть - несколько тысяч строк, что же делать?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
03.06.2012, 20:49     Запись в файл и вывод структуры через под программы #11
MrGluck, "если бы" не катит. Это раз. Два - я не призываю заменять циклы и условные переходы на goto. Три - я показал абстрактный пример, вы же превратили его в конкретный. Ситуаций бывает много, хороших и разных. Категорично отказываться от чего-либо только потому, что кто-то считает это "не трушным" - само по себе не трушно.
На счёт "насколько тяжелее воспринимать" - тяжелее. Я например не сразу нашёл "&& b".
Ну а про выстрел в ногу - так мы вроде тут о программировании говорим. Да ещё на сях-плюсях. Тут можно выстрелить себе в ногу тысячами разных способов, многие из которых гораздо замысловатее обычного goto.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2012, 20:56     Запись в файл и вывод структуры через под программы
Еще ссылки по теме:

Запись Структуры в файл C++
Запись структуры в файл C++
C++ Запись структуры в файл

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

Или воспользуйтесь поиском по форуму:
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
03.06.2012, 20:56     Запись в файл и вывод структуры через под программы #12
MrGluck, вас можно понять, просто вы не работали с ассемблером и поэтому для вас goto так плохо и не приемлемо
Yandex
Объявления
03.06.2012, 20:56     Запись в файл и вывод структуры через под программы
Ответ Создать тему
Опции темы

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