powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите довести до ума!!!
20 сообщений из 20, страница 1 из 1
Помогите довести до ума!!!
    #33110630
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Помогите пожалуйста бедному студенту!
У меня есть программа, но её нужно доработать, а конкретнее сделать так, чтобы таблица сохранялось и загружалось, там есть алгоритм ввода и вывода, но чего то не пашет, добавьте пожалуйста то, чего не хватает (там чего то не получается, где то цикл замыкается, если сможете, исправьте plz), а иначе скоро будет ещё одна жертва науки =)
З.Ы. программа выполнена в C++

Код: plaintext
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.
#include<conio.h>
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
#include<fstream.h>
struct stud
{
char Name[ 20 ],Tel[ 10 ];
int Age;
int Sex;
};

char*fname() {char*s=new char[ 40 ];
cout<<"Enter FileName:"; cin>>s;return s;}

void save (fstream&x, stud y) { x<<y.Age<<' '<<y.Sex<<' ';}
void save (char fn[], stud x[], int n)
{int i; fstream f;
f.open (fn, ios::out);
f<<n<<' ';
for (i= 0 ;i<n;i++)
save (f, x[i]);f.close();}

void load (fstream&x, stud&y){x>>y.Age>>y.Sex>>y.Tel;}

void load (char fn[], stud x[], int&n)
{int i;fstream f;
f.open (fn, ios::in);
f>>n;
for (i= 0 ; i<n;i++)
load(f,x[i]);
f.close();}

void input (stud&record)
{
cout<<"input Name:";cin>>record.Name;
cout<<"input Age:";cin>>record.Age;
cout<<"input Sex:";
cin>>record.Sex;

//record.Sex=(sex=='m'||sex=='M')?1:0;// это преподу не понравилось и он убрал
cout<<"input Tel:";cin>>record.Tel;
}

void output(stud& record)
{
cout<<record.Name<<'\t';
cout<<record.Age<<'\t';
cout<<record.Sex<<'\t';
cout<<record.Tel<<endl;
}

void output_all(stud records[], int cout)
{
for (int i= 0 ;i<cout;i++)
output(records[i]);
}

void the_tel(stud records[], int count)
{
char new_tel[ 3 ];
cout<<"new_tel=";
cin>>new_tel;
int flag= 0 ;
for (int i= 0 ;i<count;i++)
{
flag= 1 ;
for (int j= 0 ;j< 3 ;j++)
if (new_tel[j]!=records[i].Tel[j])
{
flag= 0 ;
break;
}
if(flag)
 output(records[i]);
 }
}

void the_name(stud records[], int count)
{
 char new_bukva;
 cout<<"new_bukva=";
 cin>>new_bukva;

 for(int i= 0 ;i<count; i++)
 {
if(new_bukva==records[i].Name[ 1 ])
output(records[i]);
}
}

char menu()
{
char b;
cout<<"1-new record"<<endl;
cout<<"2-show all record"<<endl;
cout<<"3-the_telefon"<<endl;
cout<<"4-the_name"<<endl;
cout<<"5-Exit"<<endl;
cout<<"6-Save"<<endl;
cout<<"7-Load"<<endl;

cout<<"input:";
cin>>b;
return b;
}

int main()
{
stud table[ 20 ];
int cur= 0 ;
char key= 0 ;
clrscr();
for(;;)
{
key=menu();
clrscr();
switch (key)
{
case'1':
if (cur< 20 )
{
input(table[cur]);
cur++;
}
else
cout<<"error:input max record"<<endl;
break;
case'2':
output_all(table, cur);
break;
case'3':
the_tel(table, cur);
break;
case'4':
the_name(table, cur);
break;
case'5':
return  0 ;
  }
 }
}
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33110798
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FeanorЗдравствуйте!
Помогите пожалуйста бедному студенту!
У меня есть программа, но её нужно доработать, а конкретнее сделать так, чтобы таблица сохранялось и загружалось, там есть алгоритм ввода и вывода, но чего то не пашет, добавьте пожалуйста то, чего не хватает (там чего то не получается, где то цикл замыкается, если сможете, исправьте plz), а иначе скоро будет ещё одна жертва науки =)
З.Ы. программа выполнена в C++


На первый, очень поверхностный взгляд, не хватает отработки пунктов меню 6 и 7 (Save и Load)...

А еще у меня такой вопрос:
вот Вы говорите, что цикл "где-то затыкается"...
А отладчиком (и пошаговым выполнением программы) Вы, уважаемый, пользовались чтобы определить где именно цикл затыкается и какие при этом значения принимают переменные?...

Такое ощущение, что программа написана кем-то (не Вами однозначно!) "на коленке" за 15 минут, не отлаживалась... И у Вас есть тысяча "объективных причин", чтобы самому этого (отладки, доводки кода "до ума", чтения книжек и поиска ответов в них) не делать... И поручить это неблагодарное "лохам" с форума...

Может быть, наоборот, это и хорошо, что будет еще одна подобная "жертва науки", которая потом не будет позорить светлое имя "Программиста" ... "Нам такой хоккей не нужен..." (не моё)
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33111349
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, где она замыкается (switch (key):

Код: plaintext
1.
2.
key=menu();
clrscr();
switch (key)

Да,и Я не считаю людей на форуме, с вашего позволения, лохами, а прошу лишь помочь т.к. Я в этом деле диллтант, и программистом становиться не собираюсь (пока что).
А если не хотите помочь, так к чему писать такие речи, ибо Я и сам знал, что сохранение и загрузка не доделанны, и именно поэтому решил попросить грамотных людей помочь мне.
Прошу помочь, ведь это не трудно для Вас.
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33114484
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые Титаны написания программ, взываю к Вам!!!
Помогите же Бедолаге!!!
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33114596
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Feanor wrote:
> Уважаемые Титаны написания программ, взываю к Вам!!!
> Помогите же Бедолаге!!!
Без обид, но Вы -- лодырь и бездельник!
Код: plaintext
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.
include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
#include<fstream.h>
struct stud
{
     char Name[ 20 ],Tel[ 10 ];
     int Age;
     int Sex;
     friend ostream & operator << (ostream& out, stud& record);
     friend istream & operator >> (istream& out, stud& record);
};

istream& operator >>(istream& in, stud&record)
{
     if(in == cin) cout<<"input Name:";   in>>record.Name;
     if(in == cin) cout<<"input Age:";    in>>record.Age;
     if(!in.good()) throw std::ios_base::failure("Wrong age format!");
     if(in == cin) cout<<"input Sex:";    in>>record.Sex;
     if(!in.good()) throw std::ios_base::failure("Wrong sex format!");
     if(in == cin) cout<<"input Tel:";    in>>record.Tel;
     return in;
}

ostream & operator <<(ostream & out, stud& record)
{
     out<<record.Name<<'\t';
     out<<record.Age<<'\t';
     out<<record.Sex<<'\t';
     out<<record.Tel<<endl;
     return out;
}

void output_all(stud records[], int count)
{
     for (int i= 0 ;i<count;i++)
         cout << records[i];
}

void the_tel(stud records[], int count)
{
     char new_tel[ 14 ];
     cout<<"new_tel=";
     cin >>new_tel;
     for (int i= 0 ;i<count;i++)
         if(! strncmp(new_tel, records[i].Tel, strlen(new_tel)) )
             cout << records[i];
}

void the_name(stud records[], int count)
{
     char new_bukva;
     cout<<"new_bukva="; cin>>new_bukva;
     for(int i= 0 ;i<count; i++)
         if(new_bukva==records[i].Name[ 0 ])
             cout << records[i];
}
void the_save(stud records[], int count){
     ofstream fos("records.dat");
     fos << count << endl;
     for(int i= 0 ;i<count;i++)
       fos << records[i];
     fos.close();
}
void the_load(stud records[], int max_count, int* count){
     fstream fis("records.dat", fstream::in);
     int n;
     fis >> n;
     cout << n << endl;
     n = max_count<n ? max_count : n;
     for(int i= 0 ;i<n;i++){
       cout << "Reading " << i << "\n";
       fis >> records[i];
     }
     fis.close();
     *count = n;
}
char menu()
{
     char b;
     cout<<"1-new record"<<endl;
     cout<<"2-show all record"<<endl;
     cout<<"3-the_telefon"<<endl;
     cout<<"4-the_name"<<endl;
     cout<<"5-Exit"<<endl;
     cout<<"6-Save"<<endl;
     cout<<"7-Load"<<endl;

     cout<<"input:";
     do {
         cin.sync();
         cin>>b;
     }while( ! (b>='1' && b<='7') );
     return b;
}

int main()
{
     stud table[ 20 ];
     int cur= 0 ;
     char key= 0 ;
     for(;;)
     {
         key=menu();
         switch (key)
         {
         case'1':
             if (cur< 20 )
             {
                 try{
                         cin >> table[cur];
                         cur++;
                 }catch(std::ios_base::failure exept){
                         cin.sync();
                         cin.clear();
                         cout << "Caught exception!\n";
			cout << exept.what() << endl;
                 }
             }
             else
                 cout<<"error:input max record"<<endl;
             break;
         case'2':
             output_all(table, cur);
             break;
         case'3':
             the_tel(table, cur);
             break;
         case'4':
             the_name(table, cur);
             break;
         case '5':
             exit( 0 );
         case '6':
             the_save(table, cur);break;
         case '7':
             the_load(table,  20 , &cur); break;
         }
     }
}

Вопрос лентяю на засыпку - почему я выкинул <conio.h> и зачем написал
throw и try - catch и не нужно ли их добавить где-то еще ???
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33114681
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторВопрос лентяю на засыпку - почему я выкинул <conio.h> и зачем написал
throw и try - catch и не нужно ли их добавить где-то еще ???

Во первых, ОГРОМНОЕ СПАСИБО!!!!!!
А теперь постараюсь дать свои диллетантские ответы на эти вопросы:
авторпочему я выкинул <conio.h>

Скорее всего из-за простой ненадобности этой библиотеки.


авторthrow и try - catch и не нужно ли их добавить где-то еще ???
throw и try - catch
Итак, если условие не выполняется, то throw, т.е. выкидываем, а если выполняется, то try - catch , т.е. если выполняется, то отлавливаем.
Где нужно ещё, пока не пойму =)

Ну как?
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33114977
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Feanor wrote:
> ... выкинул <conio.h>
> Скорее всего из-за простой ненадобности этой библиотеки.
>
Почти угадал, не нужна она мне в GCC (да и нет ее там) :)
>
> throw и try - catch
> Итак, если условие не выполняется, то throw, т.е. выкидываем, а если
> выполняется, то try - catch , т.е. если выполняется, то отлавливаем.
> Где нужно ещё, пока не пойму =)

A почему именно такая проверка условий, зачем нужна, и не нужно ли это в
load? :)
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33115094
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторA почему именно такая проверка условий, зачем нужна, и не нужно ли это в
load? :)
Думаю, что в Load эта проверка не нужна, т.к. проходит выше.

Код: plaintext
1.
if(!in.good()) throw std::ios_base::failure("Wrong sex format!");
     if(in == cin) cout<<"input Tel:";    in>>record.Tel;
Такая проверка условий нужна для отсеивания ненужных значений, Я полагаю.
Т.к. если if yt good, т.е. когда не не введённое, то выбрасываем, пишем, что неудача и, неправильный формат, Я запутался...
if выполняется всегда, когда число истина, т.е. не ноль...это Я знаю =)
А что за оператор :: извиняюсь за такой вопрос, что такое fos и fis =)
Если не трудно, напиши пожалуйста комментарии к сохранению, а особенно, к загрузке, Я туго пока в этом разбираюсь...
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33115121
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Студент, неужели в библиотеке нет учебников по C++ ???
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33115211
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть =(
Ну Я хоть часть правильно ответил?
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33115395
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
n = max_count<n ? max_count : n;
Почему сдесь : а не ::
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33115671
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторn = max_count<n ? max_count : n;

Почему сдесь : а не ::

Таков синтаксис тернарного оператора.
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33115817
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторТаков синтаксис тернарного оператора.
Спасибо, теперь буду знать. =)
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33118154
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи!!!
Проверьте пожалуйта эту прогу (желательно Borland С++ v1.3 или ), а то Я сегодня сумел бегло забежать в класс информатики (а нас туда теперь только к экзамену пустят) и мне высветилось 7 ошибок, в их природе не успел разобраться, Я не вру, действительно нас оттуда гонят, а у меня на компе эта версия глюканая. Проверьте пожалуйста, кто сможет, у себя, действительно надо =)

Код: plaintext
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.
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
#include<fstream.h>
struct stud
{
     char Name[ 20 ],Tel[ 10 ];
     int Age;
     int Sex;
     friend ostream & operator << (ostream& out, stud& record);
     friend istream & operator >> (istream& out, stud& record);
};

istream& operator >>(istream& in, stud&record)
{
     if(in == cin) cout<<"input Name:";   in>>record.Name;
     if(in == cin) cout<<"input Age:";    in>>record.Age;
     if(!in.good()) throw std::ios_base::failure("Wrong age format!");
     if(in == cin) cout<<"input Sex:";    in>>record.Sex;
     if(!in.good()) throw std::ios_base::failure("Wrong sex format!");
     if(in == cin) cout<<"input Tel:";    in>>record.Tel;
     return in;
}

ostream & operator <<(ostream & out, stud& record)
{
     out<<record.Name<<'\t';
     out<<record.Age<<'\t';
     out<<record.Sex<<'\t';
     out<<record.Tel<<endl;
     return out;
}

void output_all(stud records[], int count)
{
     for (int i= 0 ;i<count;i++)
         cout << records[i];
}

void the_tel(stud records[], int count)
{
     char new_tel[ 14 ];
     cout<<"new_tel=";
     cin >>new_tel;
     for (int i= 0 ;i<count;i++)
         if(! strncmp(new_tel, records[i].Tel, strlen(new_tel)) )
             cout << records[i];
}

void the_name(stud records[], int count)
{
     char new_bukva;
     cout<<"new_bukva="; cin>>new_bukva;
     for(int i= 0 ;i<count; i++)
         if(new_bukva==records[i].Name[ 0 ])
             cout << records[i];
}
void the_save(stud records[], int count){
     ofstream fos("records.dat");
     fos << count << endl;
     for(int i= 0 ;i<count;i++)
       fos << records[i];
     fos.close();
}
void the_load(stud records[], int max_count, int* count){
     fstream fis("records.dat", fstream::in);
     int n;
     fis >> n;
     cout << n << endl;
     n = max_count<n ? max_count : n;
     for(int i= 0 ;i<n;i++){
       cout << "Reading " << i << "\n";
       fis >> records[i];
     }
     fis.close();
     *count = n;
}
char menu()
{
     char b;
     cout<<"1-new record"<<endl;
     cout<<"2-show all record"<<endl;
     cout<<"3-the_telefon"<<endl;
     cout<<"4-the_name"<<endl;
     cout<<"5-Exit"<<endl;
     cout<<"6-Save"<<endl;
     cout<<"7-Load"<<endl;

     cout<<"input:";
     do {
         cin.sync();
         cin>>b;
     }while( ! (b>='1' && b<='7') );
     return b;
}

int main()
{
     stud table[ 20 ];
     int cur= 0 ;
     char key= 0 ;
     for(;;)
     {
         key=menu();
         switch (key)
         {
         case'1':
             if (cur< 20 )
             {
                 try{
                         cin >> table[cur];
                         cur++;
                 }catch(std::ios_base::failure exept){
                         cin.sync();
                         cin.clear();
                         cout << "Caught exception!\n";
			cout << exept.what() << endl;
                 }
             }
             else
                 cout<<"error:input max record"<<endl;
             break;
         case'2':
             output_all(table, cur);
             break;
         case'3':
             the_tel(table, cur);
             break;
         case'4':
             the_name(table, cur);
             break;
         case '5':
             exit( 0 );
         case '6':
             the_save(table, cur);break;
         case '7':
             the_load(table,  20 , &cur); break;
         }
     }
}
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33118374
+COOL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот готовый код я там просто for поцитировал

#pragma argsused
#include<conio.h>
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
#include<fstream.h>
struct stud
{
char Name[20],Tel[10];
int Age;
int Sex;
};

char*fname() {char*s=new char[40];
cout<<"Enter FileName:"; cin>>s;return s;}

void save (fstream&x, stud y) { x<<y.Age<<' '<<y.Sex<<' ';}
void save (char fn[], stud x[], int n)
{int i; fstream f;
f.open (fn, ios::out);
f<<n<<' ';
for (i=0;i<n;i++)
save (f, x );f.close();}

void load (fstream&x, stud&y){x>>y.Age>>y.Sex>>y.Tel;}

void load (char fn[], stud x[], int&n)
{int i;fstream f;
f.open (fn, ios::in);
f>>n;
for (i=0; i<n;i++)
load(f,x);
f.close();}

void input (stud&record)
{
cout<<"input Name:";cin>>record.Name;
cout<<"input Age:";cin>>record.Age;
cout<<"input Sex:";
cin>>record.Sex;

//record.Sex=(sex=='m'||sex=='M')?1:0;// ýòî ïðåïîäó íå ïîíðàâèëîñü è îí óáðàë
cout<<"input Tel:";cin>>record.Tel;
}

void output(stud& record)
{
cout<<record.Name<<'\t';
cout<<record.Age<<'\t';
cout<<record.Sex<<'\t';
cout<<record.Tel<<endl;
}

void output_all(stud records[], int cout)
{
for (int i=0;i<cout;i++)
output(records);
}

void the_tel(stud records[], int count)
{
char new_tel[3];
cout<<"new_tel=";
cin>>new_tel;
int flag=0;
for (int i=0;i<count;i++)
{
flag=1;
for (int j=0;j<3;j++)
if (new_tel[j]!=records.Tel[j])
{
flag=0;
break;
}
if(flag)
output(records);
}
}

void the_name(stud records[], int count)
{
char new_bukva;
cout<<"new_bukva=";
cin>>new_bukva;

for(int i=0;i<count; i++)
{
if(new_bukva==records.Name[1])
output(records);
}
}

char menu()
{
char b;
cout<<"1-new record"<<endl;
cout<<"2-show all record"<<endl;
cout<<"3-the_telefon"<<endl;
cout<<"4-the_name"<<endl;
cout<<"5-Exit"<<endl;
cout<<"6-Save"<<endl;
cout<<"7-Load"<<endl;

cout<<"input:";
cin>>b;
return b;
}

int main()
{
stud table[20];
int cur=0;
char key=0;
clrscr();
//for(;;)//здесь у тебя был цыкл я просто убрал его
{
key=menu();
clrscr();
switch (key)
{
case'1':
if (cur<20)
{
input(table[cur]);
cur++;
}
else
cout<<"error:input max record"<<endl;
break;
case'2':
output_all(table, cur);
break;
case'3':
the_tel(table, cur);
break;
case'4':
the_name(table, cur);
break;
case'5':
return 0;
}
}
}
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33118558
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+COOLВот готовый код я там просто for поцитировал
//for(;;)//здесь у тебя был цыкл я просто убрал его


А вот это не верно и крайне вредно... Так программа будет работать только один раз (отрабатывать один пункт меню), а надо, чтобы она работала до явного указания на выход... Так что, поторопились Вы, батенька...
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33118597
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FeanorТоварищи!!!
Проверьте пожалуйта эту прогу (желательно Borland С++ v1.3 или ), а то Я сегодня сумел бегло забежать в класс информатики (а нас туда теперь только к экзамену пустят) и мне высветилось 7 ошибок, в их природе не успел разобраться, Я не вру, действительно нас оттуда гонят, а у меня на компе эта версия глюканая. Проверьте пожалуйста, кто сможет, у себя, действительно надо =)

Так надо было сразу об этом сказать...
Та программа, которая тебе тут дана, переписана, скорее всего, под VC++.
Досовский С++ от Борланда не понимает инструкций try-catch-throw и из-за этого выдает тебе кучу ошибок... Кроме того, в той версии С++ нет базового класса ios_base, есть ios; но некоторые функции отличаются: например, в ДОСе у класса ios нет функции sync(), зато есть функция sync_with_stdio(); нет функции failure(), зато есть fail() и т.д. Это дает тебе остальные ошибки...

В заключение - вот тебе работающий под Borland C++ 3.1 код (сильно не пинать: делал так, чтобы работало, а не так, чтобы было красиво...) :
Код: plaintext
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.
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
#include<fstream.h>

struct stud
{
char Name[ 20 ];
char Tel[ 10 ];
int Age;
char Sex;
};

void the_save(stud records[], int count){
     ofstream fos("records.dat");
     fos << count << endl;
     for(int i= 0 ;i<count;i++)
       fos << records[i].Name<<endl<<records[i].Age<<endl<<records[i].Sex<<endl<<records[i].Tel<<endl;
     fos.close();
}

void the_load(stud records[], int max_count, int* count){
     fstream fis("records.dat", fstream::in);
     int n;
     fis >> n;
     cout << n << endl;
     n = max_count<n ? max_count : n;
     for(int i= 0 ;i<n;i++){
       cout << "Reading " << i << "\n";
       fis >> records[i].Name;
       fis>>records[i].Age;
       fis>>records[i].Sex;
       fis>>records[i].Tel;
     }
     fis.close();
     *count = n;
}

void input (stud&record)
{
printf("input Name: ");
scanf("%s",record.Name);
printf("input Age:");
scanf("%d",&(record.Age));
printf("input Sex:");
record.Sex=getche();
printf("\r\ninput Tel:");
scanf("%s",record.Tel);
}

void output(stud& record)
{
printf("%s\t%d\t%c\t%s\r\n",record.Name,record.Age,record.Sex,record.Tel);
}

void output_all(stud records[], int cout)
{
for (int i= 0 ;i<cout;i++)
 output(records[i]);
printf("Press any key to continue...");
while(!kbhit());
}

void the_tel(stud records[], int count)
{
char new_tel[ 10 ];
printf("new_tel=");
scanf("%s",new_tel);
int flag= 0 ;
for (int i= 0 ;i<count;i++)
{
flag= 1 ;
for (int j= 0 ;j< 3 ;j++)
if (new_tel[j]!=records[i].Tel[j])
{
flag= 0 ;
break;
}
if(flag)
 {
  output(records[i]);
  printf("Press any key to continue...");
  while(!kbhit());
 }
}
}

void the_name(stud records[], int count)
{
 char new_bukva;
 cout<<"new_bukva=";
 cin>>new_bukva;

 for(int i= 0 ;i<count; i++)
 {
  if(new_bukva==records[i].Name[ 1 ])
   output(records[i]);
 }
printf("Press any key to continue...");
while(!kbhit());
}

char menu()
{
char b;
 clrscr();
cout<<"1-new record"<<endl;
cout<<"2-show all record"<<endl;
cout<<"3-the_telefon"<<endl;
cout<<"4-the_name"<<endl;
cout<<"5-Exit"<<endl;
cout<<"6-Save"<<endl;
cout<<"7-Load"<<endl;

printf("input:\r\n");
return (b=getch());
}

int main()
{
stud table[ 20 ];
int cur= 0 ;
char key= 0 ;

for(;;)
{
 key=menu();
 clrscr();
 switch (key)
 {
  case'1':
   if (cur< 20 )
   {
    input(table[cur]);
    cur++;
   }
   else
    cout<<"error:input max record"<<endl;
    break;
   case'2':
    output_all(table, cur);
    break;
   case'3':
    the_tel(table, cur);
    break;
   case'4':
    the_name(table, cur);
    break;
   case'5':
    return  0 ;
    break;
   case'6':
    the_save(table,cur);
    break;
   case'7':
    the_load(table, 20 ,&cur);
    break;
  }
 }
}
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33119486
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо =)))
Я правда кое-что не допонял, если не трудно, то поясните пожалуйста:

1. Что означает (!kbhit())
Код: plaintext
while(!kbhit());

2. Тут непонятно что за "%s\t%d\t%c\t%s\r\n" т.е. ясно, что происходит вывод, но что такое scanf и вот это всё "%s\t%d\t%c\t%s\r\n" ????

Код: plaintext
printf("%s\t%d\t%c\t%s\r\n",record.Name,record.Age,record.Sex,record.Tel);


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
printf("input Name: ");
scanf("%s",record.Name);
printf("input Age:");
scanf("%d",&(record.Age));
printf("input Sex:");
record.Sex=getche();
printf("\r\ninput Tel:");
scanf("%s",record.Tel);

Ещё раз спасибо =))
Буду рад, если поясните это мне - неучу.
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33119568
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FeanorСпасибо =)))
Я правда кое-что не допонял, если не трудно, то поясните пожалуйста:

1. Что означает (!kbhit())
Код: plaintext
while(!kbhit());

2. Тут непонятно что за "%s\t%d\t%c\t%s\r\n" т.е. ясно, что происходит вывод, но что такое scanf и вот это всё "%s\t%d\t%c\t%s\r\n" ????

Код: plaintext
printf("%s\t%d\t%c\t%s\r\n",record.Name,record.Age,record.Sex,record.Tel);


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
printf("input Name: ");
scanf("%s",record.Name);
printf("input Age:");
scanf("%d",&(record.Age));
printf("input Sex:");
record.Sex=getche();
printf("\r\ninput Tel:");
scanf("%s",record.Tel);

Ещё раз спасибо =))
Буду рад, если поясните это мне - неучу.

1. Дело в том, что я отказался в большинстве случаев от использования ввода-вывода через классы (почему-то именно из-за них наблюдался глюк при вводе информации) и использовал ввод-вывод в стиле С. Может быть не современно, зато работает стабильно...
Итак:
printf - функция форматного вывода информации на консоль;
scanf - функция форматного считывания данных с консоли.
Строка "%s\t%d\t%c\t%s\r\n" называется форматной строкой, где символы имеют следующие значения:
%s - выводимый аргумент является строкой;
\t - символ табуляции;
%d - выводимый аргумент является числом и должен быть выведен в десятеричной системе счисления (если бы было %x, то число было бы выведено в шестнадцатиричном формате(хекс, hex));
%c - выводимый аргумент является единичным символом;
\r\n - пара "возврат каретки-перевод строки" для перехода на новую строку

2. Конструкция while(!kbhit()); обозначает следующее:
- ! - это логическое NOT (по русски говоря: НЕ)
- функция kbhit() проверяет нажатие любой клавиши и возвращает некоторое значение, которое можно интерпретировать как TRUE или FALSE
- while() - оператор цикла "пока"
Итого получаем следующую интерпретацию представленной конструкции (говоря простым русским языком): "Пока НЕ нажата любая из клавиш"

Да, кстати... Я тут более внимательно посмотрел на свое решение и решение от ХМ и щаметил одну ошибку . В функции the_name надо писать не:
Код: plaintext
1.
if(new_bukva==records[i].Name[ 1 ]) //так написано у меня
а:
Код: plaintext
1.
if(new_bukva==records[i].Name[ 0 ]) //так написано у ХМ

Это все написано в хелпе. Даже если у тебя сам Turbo C++ встал криво, то хелп-то по F1 должен работать...
...
Рейтинг: 0 / 0
Помогите довести до ума!!!
    #33119646
Feanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!!!
Очень рад, что есть на свете ещё люди, которые могут помочь бедолагам типа меня =)
Респект!!!
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите довести до ума!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]