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

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

Войти
Регистрация
Восстановить пароль
 
Ironhide7
0 / 0 / 0
Регистрация: 01.06.2012
Сообщений: 17
#1

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

01.06.2012, 22:12. Просмотров 778. Ответов 11
Метки нет (Все метки)

Помогите пожалуйста создал структуру которая содержит название игрушек,страну производителя, цену, возростные рамки и количество. записал в файл но при выводе выводит какие то символы. когда запись файла и вывод находится в одной под программе выводет нормально, но если запись в файл находить в одной под программе, а вывод в другой выводит какие то символы.
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();}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 22:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись в файл и вывод структуры через под программы (C++):

Запись/вывод структуры в файл - C++
Здравствуйте. Само задание: Написать функцию, которая динамически выделяет память под массив структур (не меньше шести элементов),...

Запись структуры в файл, чтение из файла и удаление (файловый ввод/вывод) - C++
Добрый вечер! Возникла такая проблема, что при добавлении записи, удаляются уже имеющиеся записи в файле. Также не помешала бы помощь в...

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

Запись в файл структуры - C++
Есть структура Помогите реализовать запись в файл? Мой вариант не работает.... #include&quot;stdafx.h&quot; #include&quot;iostream&quot; ...

Запись структуры в файл - C++
имеется одномерный массив типа структуры base struct base { String name; String work; String year; } каким образом...

Запись Структуры в файл - C++
Здравствуйте пытаюсь записать массив структур в файл и не получается.В Файле содержится иероглифы.Помогите пожалуйста. #include...

11
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
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);
0
Ironhide7
0 / 0 / 0
Регистрация: 01.06.2012
Сообщений: 17
02.06.2012, 14:33  [ТС] #3
Пробовал сделать как вы сказали не помогло. Все также. Меня интересует только первая под программа и последняя остальное пока не важно. Не могу понять почему если запись структуры в файл и вывод структуры из файла находятся в одной подпрограмме то все отлично работает. если в разных подпрограммах выводит символы. Помогите пожалуйста.
0
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();
 
 }
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
03.06.2012, 19:13 #5
Цитата Сообщение от Ironhide7 Посмотреть сообщение
Наконец то я доделал эту программу. Правда есть еще не большие недочеты.
Например теги форматирования кода и использование go to, что делает код нечитабельным вообще.
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
03.06.2012, 19:20 #6
Цитата Сообщение от MrGluck Посмотреть сообщение
и использование go to, что делает код нечитабельным вообще
Во-первых, предрассудки по использованию goto - распространенное заблуждение, во-вторых, где вы его тут увидели?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
03.06.2012, 19:35 #7
Прошу прощения, перепутал goto() и gotoxy(). Тяжело разбираться в монотонном потоке текста.

Не по теме:

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

0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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 - операторы с меткой. При этом метка может находиться только перед соответствующим циклом и будет означть прерывание (продолжение) этого цикла при применении соответствующей формы оператора.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
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;
}
?

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

Цитата Сообщение от MrGluck Посмотреть сообщение
Каждый раз использовать Ctrl + F?
а вы писали большие проекты? Я лично писал и пишу и не представляю, как можно писать код и не держать его часть в голове, иногда эта часть - несколько тысяч строк, что же делать?
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.06.2012, 20:49 #11
MrGluck, "если бы" не катит. Это раз. Два - я не призываю заменять циклы и условные переходы на goto. Три - я показал абстрактный пример, вы же превратили его в конкретный. Ситуаций бывает много, хороших и разных. Категорично отказываться от чего-либо только потому, что кто-то считает это "не трушным" - само по себе не трушно.
На счёт "насколько тяжелее воспринимать" - тяжелее. Я например не сразу нашёл "&& b".
Ну а про выстрел в ногу - так мы вроде тут о программировании говорим. Да ещё на сях-плюсях. Тут можно выстрелить себе в ногу тысячами разных способов, многие из которых гораздо замысловатее обычного goto.
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
03.06.2012, 20:56 #12
MrGluck, вас можно понять, просто вы не работали с ассемблером и поэтому для вас goto так плохо и не приемлемо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2012, 20:56
Привет! Вот еще темы с ответами:

запись структуры в файл - C++
#include &lt;cstdio&gt; #include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; struct MyStruct { char name; char...

Запись структуры в файл - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &quot;stdafx.h&quot; int main() { struct TDataTime { int Day; int...

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

Запись структуры в файл - C++
Помогите найти ошибку в коде. Задание. Разработать программу на языке С + +, реализующей запись в файл информации о студенте (10...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
03.06.2012, 20:56
Ответ Создать тему
Опции темы

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