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

Добавить функции в класс - C++

Восстановить пароль Регистрация
 
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
28.06.2012, 12:33     Добавить функции в класс #1
Есть класс который содержит данные о студентах и функции, которые позволяют добавлять/удалять студента. Как 1. Сделать проверку, что бы в текстовые поля нельзя было заносить цифры. 2. Добавить функцию, которая бы позволяла изменять данные конкретного студента?


заголовочный
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
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include<stdio.h>
#include<windows.h>
#include<iostream>
using namespace std;
struct  date
{
    int day;
    char month [10];
    int  year;
};
class Student
{
    public:
    char *fam;
    char *name;
    int contact;
    date br;
 
    Student()
    {
        fam=new char[20];
        name=new char[20];
        date br1={1,"Января",1980};
        contact=0;
    }
    
void Info ()
{
    cout<<"Введите фамилию:\n";
    cin>>fam;
    cout<<"Введите имя:\n";
    cin>>name;
    cout<<"Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:\n";
    cin>>br.day;
    cin>>br.month;
    cin>>br.year;
    cout<<"Введите номер телефона:\n";
    cin>>contact;
}
 
void show ()
{
    cout<<"фамилия:\t"<<fam<<endl;
    cout<<"имя:\t\t"<<name<<endl;
    cout<<"дата рождения:\t"<<br.day<<"/"<<br.month<<"/"<<br.year<<endl;
    cout<<"телефон:\t"<<contact<<endl;
}
~Student()
    {
        delete[]fam;
        delete[]name;
    }
};
class Group: public Student
{
private:
 char* Name;
 char* Specializ;
 Student st[30];
public:
 Group()
    {
       
        Name=new char[25];
        Specializ=new char[25];
    }
 
 
  void Info_gr ()
{
    cout<<"Введите имя группы:\n";
    cin>>Name;
    cout<<"Введите специальность:\n";
    cin>>Specializ;
}
 
void Show_gr ()
{
    cout<<"имя группы::\t"<<Name<<endl;
    cout<<"специальность:\t"<<Specializ<<endl;
}
~Group()
    {
        delete[]Name;
        delete[]Specializ;
    }
};
cpp

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
#include "klass.h"
void poisk(char *NAME,Group *poisk,int size)
{
 
    int z=0;
    for(int i=0; i<size;i++)
    {
                if (stricmp(NAME, poisk[i].fam)==0)
                {
                       poisk[i].show();
                       poisk[i].Show_gr();
                        break;
                        
                }
                if (stricmp(NAME, poisk[i].fam)!=0);
                z=1;
               
     } 
    if(z==1)cout<<"error";
}
 
void main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
    int kol=0;
    int n=0;
    int dob; 
    int temp=kol;
    int number;
    char *fam1=new char[20];
    Group *gr=new Group[10];
   do
   {
    cout<<" 1-создать список студентов \n 2-показать список \n 3-добавить студента \n 4- удалить студента \n 5-поиск по фамилии\n 0-выход\n";
    cin>>n;
    int size;
    switch(n)
    {
    case 1:
       cout<<"Введите количество студентов в группе:\n";
       cin>>kol;
 
            for(int i=0;i<kol;i++)
                {
                 gr[i].Info();
                gr[i].Info_gr();
                
                }
            
            break;
 
    case 2:
        for(int i=0;i<kol;i++)
        {
        cout<<"Студент N"<<i+1<<"\n";
        gr[i].show();
        gr[i].Show_gr();
        }
        break;
    case 3:
        
        temp=kol;  
        cout<<"Введите количество студентов которое необходимо добавить "<<endl;
        cin>>dob; kol=kol+dob; 
 
        for (int i=temp;i<kol;i++)  
        {  
                gr[i].Info();
                gr[i].Info_gr ();
        }
        break;
    case 4:
        
        cout<<"Удалить студента N "<<endl; 
        cin>>number;
        temp=kol;
        kol--; 
        for (int i=number-1;i<temp;i++) 
        {
            gr[i]=gr[i+1];  
        } 
    case 5:
        cout<<"Введите фамилию для поиска"<<endl;
        cin>>fam1;
        poisk (fam1,gr,kol);
 
    break;
 
       
 
    }
    }
    while(n!=0);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
28.06.2012, 17:18     Добавить функции в класс #2
1.
C++
1
2
3
4
5
6
7
8
    fam[0] = '\0';
    while( fam[0] == '\0' ) {
        cout<<"Введите фамилию:\n";
        cin>>fam;
        cout<<"Введите имя:\n";
        cin>>name;
        for( size_t i = 0; i < 20; ( isdigit( fam[i] ) || isdigit( name[i] ) ) ? fam[0] = '\0': ')', i++ );
    }
2. Этот пример ориентирован на использования массива студентов в группе Student st[30] по назначению, а не так, как у тебя - массив групп, каждая из которых странным образом является в то же время и студентом. Класс группы не должен наследовать от класса студента, так как это объединение сущностей, а не развитие их свойств.
C++
1
2
3
4
5
6
7
8
9
10
11
    bool edit_student( const char* _one ){
        bool found = false;
        for( size_t i = 0; i < 30; i++ ){
            if( ! strcmp( st[i].name, _one ) ){
                st[i].Info();
                found = true;
                break;
            }
        }
        return found;
    }
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
28.06.2012, 20:09  [ТС]     Добавить функции в класс #3
Цитата Сообщение от BRcr Посмотреть сообщение
куча непонятного кода
а можно с комментами к коду?
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
28.06.2012, 20:21     Добавить функции в класс #4
Дык, все прозрачно. Разве что тернарный оператор мог смутить. Спрашивай, чего непонятно.
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
29.06.2012, 11:36  [ТС]     Добавить функции в класс #5
Цитата Сообщение от BRcr Посмотреть сообщение
Дык, все прозрачно. Разве что тернарный оператор мог смутить. Спрашивай, чего непонятно.
вот это и непонятно

C++
1
 Этот пример ориентирован на использования массива студентов в группе Student st[30] по назначению, а не так, как у тебя - массив групп, каждая из которых странным образом является в то же время и студентом. Класс группы не должен наследовать от класса студента, так как это объединение сущностей, а не развитие их свойств.
пример бы как надо
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
29.06.2012, 16:07     Добавить функции в класс #6
Вот так примерно надо:
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
// ---------------------------------------------------------------------------
struct date {
    int day;
    char month[10];
    int year;
};
class Student {
public:
    char *fam;
    char *name;
    int contact;
    date br;
 
    Student( ) {
        fam = new char[20];
        name = new char[20];
        contact = 0;
    }
    void Info( ) {
        bool wrong = true;
        while ( wrong ) {
            cout << "Введите фамилию:\n";
            cin >> fam;
            cout << "Введите имя:\n";
            cin >> name;
            wrong = false;
            for ( size_t i = 0; i < 20; ( isdigit( fam[i] ) || isdigit( name[i] ) ) ? wrong = true : true, i++ );
            if ( wrong ) {
                cout << "В имени и фамилии не должно быть цифр и баста. \n";
            }
        }
        cout << "Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:\n";
        cin >> br.day;
        cin >> br.month;
        cin >> br.year;
        cout << "Введите номер телефона:\n";
        cin >> contact;
    }
    void show( ) {
        cout << "фамилия:\t" << fam << endl;
        cout << "имя:\t\t" << name << endl;
        cout << "дата рождения:\t" << br.day << "/" << br.month << "/" << br.year << endl;
        cout << "телефон:\t" << contact << endl;
    }
    ~Student( ) {
        delete[]fam;
        delete[]name;
    }
};
class Group {
private:
    char *Name;
    char *Specializ;
public:
    int stud_amount;
    Student st[30];
    Group( ) {
        Name = new char[25];
        Specializ = new char[25];
    }
    void Info_gr( ) {
        cout << "Введите имя группы:\n";
        cin >> Name;
        cout << "Введите специальность:\n";
        cin >> Specializ;
        cout << "Введите количество студентов в группе:\n";
        cin >> stud_amount;
    }
    void Show_gr( ) {
        cout << "имя группы::\t" << Name << endl;
        cout << "специальность:\t" << Specializ << endl;
    }
    bool edit_student( const char *_one ) {
        bool found = false;
        for ( size_t i = 0; i < stud_amount; i++ ) {
            if ( ! strcmp( st[i].fam, _one ) ) {
                st[i].Info( );
                found = true;
                break;
            }
        }
        return found;
    }
    ~Group( ) {
        delete[]Name;
        delete[]Specializ;
    }
};
// ---------------------------------------------------------------------------
void poisk( char *NAME, Group *poisk ) {
    bool found = false;
    for ( int i = 0; i < poisk->stud_amount; i++ ) {
        if ( stricmp( NAME, poisk->st[i].fam ) == 0 ) {
            poisk->st[i].show( );
            poisk->Show_gr( );
            found = true;
            break;
        }
    }
    if ( !found ) {
        cout << "error";
    }
}
// ---------------------------------------------------------------------------
int _tmain( int argc, _TCHAR *argv[] ) {
    // std::locale::global( std::locale( "" ) );
    SetConsoleOutputCP( 1251 );
    SetConsoleCP( 1251 );
 
    //////////////////////////////////////
    int n = 0, temp;
    char *fam1 = new char[20];
    Group *gr = NULL;
 
    do {
        cout << " 1-создать список студентов \n 2-показать список \n 3-добавить студента"
                       " \n 4- удалить студента \n 5-поиск по фамилии\n"
                       " 6-редактировать данные студента\n 0-выход\n";
        cin >> n;
        int size;
        switch ( n ) {
        case 1:
            if ( gr ) {
                delete gr;
            }
            gr = new Group( );
            gr->Info_gr( );
            for ( int i = 0; i < gr->stud_amount; cout << "Студент " << i + 1 << endl, gr->st[i++].Info( ) );
            break;
        case 2:
            for ( int i = 0; i < gr->stud_amount; i++ ) {
                cout << "Студент N" << i + 1 << "\n";
                gr->st[i].show( );
                gr->Show_gr( );
            }
            break;
        case 3:
            cout << "Введите количество студентов которое необходимо добавить " << endl;
            cin >> temp;
            gr->stud_amount += temp;
            for ( int i = gr->stud_amount - temp; i < gr->stud_amount; gr->st[i++].Info( ) );
            break;
        case 4:
            cout << "Удалить студента N " << endl;
            cin >> temp;
            gr->stud_amount--;
            for ( int i = temp - 1; i < gr->stud_amount; gr->st[i++] = gr->st[i + 1] );
            break;
        case 5:
            cout << "Введите фамилию для поиска" << endl;
            cin >> fam1;
            poisk( fam1, gr );
            break;
        case 6:
            cout << "Введите фамилию для редактирования" << endl;
            cin >> fam1;
            if ( !gr->edit_student( fam1 ) ) {
                cout << "нет такого";
            }
            break;
        }
    }
    while ( n != 0 );
    if ( gr ) {
        delete gr;
    }
    delete fam1;
    //////////////////////////////////////
    system( "pause" );
    return 0;
}
// ---------------------------------------------------------------------------
Далеко не идеал в плане архитектуры - так, допинал малость. И не обращай внимания на другую функцию main - у меня другой компилятор.
Вот лог работы:
Код
 1-создать список студентов
 2-показать список
 3-добавить студента
 4- удалить студента
 5-поиск по фамилии
 6-редактировать данные студента
 0-выход
1
Введите имя группы:
группа
Введите специальность:
спец
Введите количество студентов в группе:
3
Студент 1
Введите фамилию:
иванов
Введите имя:
ваня
Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:
12
мая
1988
Введите номер телефона:
121988
Студент 2
Введите фамилию:
козлов
Введите имя:
андрей
Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:
25
апреля
1986
Введите номер телефона:
251986
Студент 3
Введите фамилию:
орлов
Введите имя:
александр
Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:
14
января
1989
Введите номер телефона:
141989
 1-создать список студентов
 2-показать список
 3-добавить студента
 4- удалить студента
 5-поиск по фамилии
 6-редактировать данные студента
 0-выход
2
Студент N1
фамилия:        иванов
имя:            ваня
дата рождения:  12/мая/1988
телефон:        121988
имя группы::    группа
специальность:  спец
Студент N2
фамилия:        козлов
имя:            андрей
дата рождения:  25/апреля/1986
телефон:        251986
имя группы::    группа
специальность:  спец
Студент N3
фамилия:        орлов
имя:            александр
дата рождения:  14/января/1989
телефон:        141989
имя группы::    группа
специальность:  спец
 1-создать список студентов
 2-показать список
 3-добавить студента
 4- удалить студента
 5-поиск по фамилии
 6-редактировать данные студента
 0-выход
3
Введите количество студентов которое необходимо добавить
1
Введите фамилию:
молодой
Введите имя:
саня
Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:
30
июня
1993
Введите номер телефона:
301993
 1-создать список студентов
 2-показать список
 3-добавить студента
 4- удалить студента
 5-поиск по фамилии
 6-редактировать данные студента
 0-выход
2
Студент N1
фамилия:        иванов
имя:            ваня
дата рождения:  12/мая/1988
телефон:        121988
имя группы::    группа
специальность:  спец
Студент N2
фамилия:        козлов
имя:            андрей
дата рождения:  25/апреля/1986
телефон:        251986
имя группы::    группа
специальность:  спец
Студент N3
фамилия:        орлов
имя:            александр
дата рождения:  14/января/1989
телефон:        141989
имя группы::    группа
специальность:  спец
Студент N4
фамилия:        молодой
имя:            саня
дата рождения:  30/июня/1993
телефон:        301993
имя группы::    группа
специальность:  спец
 1-создать список студентов
 2-показать список
 3-добавить студента
 4- удалить студента
 5-поиск по фамилии
 6-редактировать данные студента
 0-выход
4
Удалить студента N
2
 1-создать список студентов
 2-показать список
 3-добавить студента
 4- удалить студента
 5-поиск по фамилии
 6-редактировать данные студента
 0-выход
2
Студент N1
фамилия:        иванов
имя:            ваня
дата рождения:  12/мая/1988
телефон:        121988
имя группы::    группа
специальность:  спец
Студент N2
фамилия:        орлов
имя:            александр
дата рождения:  14/января/1989
телефон:        141989
имя группы::    группа
специальность:  спец
Студент N3
фамилия:        молодой
имя:            саня
дата рождения:  30/июня/1993
телефон:        301993
имя группы::    группа
специальность:  спец
 1-создать список студентов
 2-показать список
 3-добавить студента
 4- удалить студента
 5-поиск по фамилии
 6-редактировать данные студента
 0-выход
6
Введите фамилию для редактирования
молодой
Введите фамилию:
бодрый
Введите имя:
вася
Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:
11
декабря
1992
Введите номер телефона:
111992
 1-создать список студентов
 2-показать список
 3-добавить студента
 4- удалить студента
 5-поиск по фамилии
 6-редактировать данные студента
 0-выход
2
Студент N1
фамилия:        иванов
имя:            ваня
дата рождения:  12/мая/1988
телефон:        121988
имя группы::    группа
специальность:  спец
Студент N2
фамилия:        орлов
имя:            александр
дата рождения:  14/января/1989
телефон:        141989
имя группы::    группа
специальность:  спец
Студент N3
фамилия:        бодрый
имя:            вася
дата рождения:  11/декабря/1992
телефон:        111992
имя группы::    группа
специальность:  спец
 1-создать список студентов
 2-показать список
 3-добавить студента
 4- удалить студента
 5-поиск по фамилии
 6-редактировать данные студента
 0-выход
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
30.06.2012, 12:37  [ТС]     Добавить функции в класс #7
после попытки ввода имени и фамилии выдает ошибку...что то с проверкой на ввод символов Попытался переделать проверку на

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
do  {
            cout << "Введите фамилию:\n";
            cin >> fam;
            cout << "Введите имя:\n";
            cin >> name;
            for ( int i = 0; i < 20;i++ )
             {
            if (  (isdigit(fam[i]))|| (isdigit(name[i])))
                cout << "В имени и фамилии не должно быть цифр и баста. \n";
            else
                wrong++;
            }
        }
        while(wrong>0);
но выбивает ту же самую ошибку
Миниатюры
Добавить функции в класс  
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
30.06.2012, 21:24  [ТС]     Добавить функции в класс #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
do
        {
            cout << "Введите фамилию:\n";
            cin >> fam;
            dl=strlen(fam);
             for ( int i = 0; i < dl;i++ )
             {
            if (  isdigit(fam[i]))
                cout << "В фамилии не должно быть цифр и баста. \n";
            else
                stop++;
            
            }
        }while(stop<dl);
вот так работает
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2012, 07:43     Добавить функции в класс #9
Цитата Сообщение от Alt_Shift Посмотреть сообщение
после попытки ввода имени и фамилии выдает ошибку...что то с проверкой на ввод символов Попытался переделать проверку на
Эта ошибка связана с русскими символами, с функцией isdigit() и с знаковым и беззнаковым char.
Почитайте здесь Задача "Работа со строками" , я там это выясняю. Один из способов исправить, явное приведение аргументов isdigit() к unsigned char.
C++
1
if (  (isdigit((unsigned char)fam[i])) || (isdigit((unsigned char)name[i])))
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
01.07.2012, 10:53  [ТС]     Добавить функции в класс #10
Цитата Сообщение от alsav22 Посмотреть сообщение
Эта ошибка связана с русскими символами, с функцией isdigit() и с знаковым и беззнаковым char.
Почитайте здесь Задача "Работа со строками" , я там это выясняю. Один из способов исправить, явное приведение аргументов isdigit() к unsigned char.
C++
1
if (  (isdigit((unsigned char)fam[i])) || (isdigit((unsigned char)name[i])))
нет. именно та ошибка была связана с другим.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
do  {
            cout << "Введите фамилию:\n";
            cin >> fam;
            cout << "Введите имя:\n";
            cin >> name;//ввожу скажем три символа
            for ( int i = 0; i < 20;i++ )// а ищет четвертый пятый...двадцатый символы
             {
            if (  (isdigit(fam[i]))|| (isdigit(name[i])))
                cout << "В имени и фамилии не должно быть цифр и баста. \n";
            else
                wrong++;
            }
        }
        while(wrong>0);
после того как переделал на i<dl (dl=strlen(fam)) то ошибка пропала. А про русские символы, ога вкурсе
BRcr
01.07.2012, 12:25
  #11

Не по теме:

хех... мой косяк - забыл про мусор в массиве.

alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2012, 22:55     Добавить функции в класс #12
Цитата Сообщение от Alt_Shift Посмотреть сообщение
нет. именно та ошибка была связана с другим.
Интересно. У меня эта ошибка, в таком коде:
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
int main()
{
    setlocale(0, "");
    SetConsoleOutputCP( 1251 );
    SetConsoleCP( 1251 );
 
    int wrong = 0;
    do  {
            
            char *fam = new char[20];
            char *name = new char[20];
            
            cout << "Введите фамилию:\n";
            cin >> fam;
            cout << "Введите имя:\n";
            cin >> name;
            for ( int i = 0; i < strlen(fam); i++ )
             {
            if (  (isdigit(fam[i])) || (isdigit(name[i])))
                cout << "В имени и фамилии не должно быть цифр и баста. \n";
            else
                wrong++;
            }
        }
        while(wrong>0);
    cout << endl;
    system("pause");
}
появляется вне зависимости от того как я напишу, так:
C++
1
for ( int i = 0; i < strlen(fam); i++ )
или так
C++
1
for ( int i = 0; i < 20; i++ )
Толко, если напишу так:
C++
1
if (  (isdigit((unsigned char)fam[i])) || (isdigit((unsigned char)name[i])))
или так
C++
1
2
unsigned char *fam = new unsigned char[20];
            unsigned char *name = new unsigned char[20];
тогда не будет. И почему-то муссор в массиве не мешает. Получается, что у меня char по умолчанию со знаком, а у вас без знака. Не пойму, где это установленно? В компиляторе? В свойствах проекта? В ОС? Если не трудно, какой у вас компилято? Какой проект создаёте? В свойствах проекта, что-нибудь выставляли?
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
02.07.2012, 00:29  [ТС]     Добавить функции в класс #13
VS 2008 пустой проект сpp

Добавлено через 4 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Интересно. У меня эта ошибка, в таком коде:[CPP]int main()
оявляется вне зависимости от того как я напишу
просто и в том и другом случае есть мусор. В первом случае у fam и name может быть разное количество символов , а счетчик у них один. Во втором- говорилось выше
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2012, 01:54     Добавить функции в класс #14
Цитата Сообщение от Alt_Shift Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
do
        {
            cout << "Введите фамилию:\n";
            cin >> fam;
            dl=strlen(fam);
             for ( int i = 0; i < dl;i++ )
             {
            if (  isdigit(fam[i]))
                cout << "В фамилии не должно быть цифр и баста. \n";
            else
                stop++;
            
            }
        }while(stop<dl);
вот так работает
Если не трудно, как fam и как dl объявлены?

Добавлено через 20 минут
Если в фамилии будет несколько цифр, то сообщение "В фамилии не должно быть цифр и баста." выведется несколько раз.

Добавлено через 17 минут
Потом, выход из do while происходит по сравнению stop и dl. Но stop, при новых итерациях цикла do while, не обнуляется, поэтому выход из него ( при какой-то итерации) будет и при цифрах в фамилии.

Добавлено через 4 минуты
Правильно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
do
        {
           stop = 0; 
           cout << "Введите фамилию:\n";
           cin >> fam;
           dl=strlen(fam);
           for ( int i = 0; i < dl; i++ )
             {
                if (  isdigit(fam[i]));
                else stop++;
             }
             if (stop < dl) cout << "В фамилии не должно быть цифр и баста. \n";
        } while(stop < dl);
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
02.07.2012, 10:28  [ТС]     Добавить функции в класс #15
fam как new char [20], dl как int. dl обнудяется после выхода из do while
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2012, 12:49     Добавить функции в класс #16
Цитата Сообщение от Alt_Shift Посмотреть сообщение
dl обнудяется после выхода из do while
Я же не про dl написал:
Но stop, при новых итерациях цикла do while, не обнуляется, поэтому выход из него (при какой-то итерации) будет и при цифрах в фамилии.
Добавлено через 20 минут
Если запустить ваш вариант кода, то, если ввести два раза, например, одну цифру и три буквы, то такая фамилия будет принята.
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
02.07.2012, 14:03  [ТС]     Добавить функции в класс #17
Цитата Сообщение от alsav22 Посмотреть сообщение
Я же не про dl написал:

Добавлено через 20 минут
Если запустить ваш вариант кода, то, если ввести два раза, например, одну цифру и три буквы, то такая фамилия будет принята.
сорь, я про stop и говорил)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2012, 14:11     Добавить функции в класс #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
do
        {
            cout << "Введите фамилию:\n";
            cin >> fam;
            dl=strlen(fam);
             for ( int i = 0; i < dl;i++ )
             {
            if (  isdigit(fam[i]))
                cout << "В фамилии не должно быть цифр и баста. \n";
            else
                stop++;
            
            }
        }while(stop<dl);
У вас такой код правильно работает?
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
02.07.2012, 20:52  [ТС]     Добавить функции в класс #19
Не правильно) stop на самом деле внутри внешнего цикла обнулять нужно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2012, 22:08     Добавить функции в класс
Еще ссылки по теме:

C++ Добавить производный класс
Как можно добавить в класс два списка? C++
C++ Требуется добавить шаблон в класс

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2012, 22:08     Добавить функции в класс #20
Цитата Сообщение от Alt_Shift Посмотреть сообщение
Не правильно) stop на самом деле внутри внешнего цикла обнулять нужно
О чём я и писал в 14 посте:
Добавлено через 20 минут
Если в фамилии будет несколько цифр, то сообщение "В фамилии не должно быть цифр и баста." выведется несколько раз.

Добавлено через 17 минут
Потом, выход из do while происходит по сравнению stop и dl. Но stop, при новых итерациях цикла do while, не обнуляется, поэтому выход из него ( при какой-то итерации) будет и при цифрах в фамилии.

Добавлено через 4 минуты
Правильно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
do
{
 stop = 0; 
 cout << "Введите фамилию:\n";
 cin >> fam;
 dl=strlen(fam);
 for ( int i = 0; i < dl; i++ )
 {
   if (  isdigit(fam[i]));
   else stop++;
 }
 if (stop < dl) cout << "В фамилии не должно быть цифр и баста. \n";
} while(stop < dl)
;
Вопросов больше нет.
Yandex
Объявления
02.07.2012, 22:08     Добавить функции в класс
Ответ Создать тему
Опции темы

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