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

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

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

не работает проверка бесконечного цикла - C++

28.02.2012, 12:06. Просмотров 680. Ответов 12
Метки нет (Все метки)

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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
// разработать класс Student, который содержит соответствующие поля для хранения: 
// * фамилии,+
// * имени,+
// * отчества,+
// * возраста,+ 
// * пола,+
// * домашнего адреса,+
// * телефонного номера,+
// * номера группы,+
// * названия специализации.+ 
 
// напишите методы, которые смогут изменять эти поля данных по отдельности.+
// напишите метод Print(), который выводит все данные о студенте в красивом формате.+
// сделать конструктор по умолчанию, конструктор с параметрами, деструктор.
 
// создать группу студентов (динамический массив), отобразить данные на экран.
 
#include <iostream>
#include <string>
 
using namespace std;
 
class student 
{
    string last_name;
    string name;
    string middle_name;
    int age;
    int sex;
    string home_address;
    double phone_number;
    int group_number;
    string names_of_specialization;
public:
    void record_last_name () // метод_записи_фамилии
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n" <<endl;continue;}
            else{cout << "Record\n" << endl;break;}
        }
        last_name = temporary;
    }
 
    void record_name () // метод_записи_имени
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n" <<endl;continue;}
            else{cout << "Record\n" << endl;break;}
        }
        name = temporary;
    }
 
    void record_middle_name () // метод_записи_отчества
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n" <<endl;continue;}
            else{cout << "Record\n" << endl;break;}
        }
        middle_name = temporary;
    }
 
    void record_home_address () // метод_записи_домашнего_адреса
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n" <<endl;continue;}
            else{cout << "Record\n" << endl;break;}
        }
        home_address = temporary;
    }
 
    void record_names_of_specialization () // метод_записи_специализации
    {
        string temporary;
        for (;;)
        {
            getline (cin , temporary);
            if (temporary.empty()){cout << "Empty string\n" <<endl;continue;}
            else{cout << "Record\n" << endl;break;}
        }
        names_of_specialization = temporary;
    }
 
    void record_age () // метод_записи_возраста
    {
        int temporary = 0;
        do
        {
            cin >> temporary;
        }while (temporary >= 16 && temporary <= 100);
        age = temporary;
    }
 
    void record_phone_number () // метод_записи_телефонного_номера
    {
        double temporary = 0;
        do
        {
            cin >> temporary ;
        }while (temporary > 0);
        phone_number = temporary;
    }
 
    void record_group_number () // метод_записи_номера_группы
    {
        int temporary = 0;
        do
        {
            cin >> temporary ;
        }while (temporary > 0);
        group_number = temporary;
    }
 
    void record_sex () // метод_записи_пола_студента
    {
        int temporary;
        cout << "1 = man, 2 = women\n";
        do
        {
            cin >> temporary;
            if (temporary != 1 && temporary != 2){cout << "Error: an incorrect value\n";}
        }while (temporary == 1 || temporary == 2);
        sex = temporary;
    };
 
    void Print () // вывод_на_экран_информации_о_студенте
    {
        cout << "Name of the student " << last_name << endl;
        cout << "The student's name " << name << endl;
        cout << "Student's first name " << middle_name << endl;
        cout << "Home address " << home_address << endl;
        cout << "Names_of_specialization " << names_of_specialization << endl;
        cout << "Age of the student " << age << endl;
        cout << "Phone number of the student " << phone_number << endl;
        cout << "Group_number " << group_number << endl;
        if (sex == 1) {cout << "Man\n";}
        else {cout << "Women\n";}
    }
 
    student () // конструктор_класса
    {
        string last_name = "NULL";
        string name = "NULL";
        string middle_name = "NULL";
        int age = 0;
        bool sex = 1;
        string home_address = "NULL";
        int phone_number = 0;
        int group_number = 0;
        string names_of_specialization = "NULL";
    }
 
    /*student (string last_name_2, string name_2, string middle_name_2, int age_2, bool sex_2, string home_address_2, int phone_number_2,
        int group_number_2, string names_of_specialization_2)  // конструктор с параметрами
    {
        string last_name = last_name_2;
        string name = name_2;
        string middle_name = middle_name_2;
        int age = age_2;
        bool sex = sex_2;
        string home_address = home_address_2;
        int phone_number = phone_number_2;
        int group_number = group_number_2;
        string names_of_specialization = names_of_specialization_2;
    }*/
};
 
 
void main ()
{
    student temporary_student;
 
    cout << "Last name\n";
    temporary_student.record_last_name ();
    
    cout << "Name\n";
    temporary_student.record_name ();
    
    cout << "Middle name\n";
    temporary_student.record_middle_name ();
    
    cout << "Home address\n";
    temporary_student.record_home_address ();
    
    cout << "Names of specialization\n";
    temporary_student.record_names_of_specialization ();
    
    cout << "Age\n";
    temporary_student.record_age ();
    
    cout << "Phone number\n";
    temporary_student.record_phone_number ();
    
    cout << "Group number\n";
    temporary_student.record_group_number ();
 
    cout << "Sex\n";
    temporary_student.record_sex ();
    
    cout << "Show\n";
    temporary_student.Print ();
 
    /*student Tolik("Pustinskiy", "Tolik", "Aleksandrovich", 26, 1, "Dobrovolskogo 18", 80630514051, 1111, "Programmist");
 
    cout << "Show\n";
    Tolik.Print ();*/
 
}
Добавлено через 2 минуты
проблема вот в чем в методе age() и ниже.......не работает проверка бесконечного цикла(то есть выходит при любо значении) а при вводе букв прыгает сразу на метод Print() всю голову сломал подскажите в чем трабл(((

Добавлено через 3 минуты
пользуюсь VS 2010 ultimate
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2012, 12:06     не работает проверка бесконечного цикла
Посмотрите здесь:

Отладка бесконечного цикла - C++
Здравствуйте. Проблема такая, написал цикл программы взаимодействия пользователя с меню Цикл не имеет условия выхода, что бы выйти...

Способы остановки бесконечного while цикла - C++
У меня такой вопрос: вот например у нас есть бесконечный цикл while с условиями while(true) { if(..){...} else(...){...}///и так...

Многопоточность, выход из бесконечного цикла c++11 - C++
Всем привет. Я в задачах многопоточности - новичок (начал ей заниматься буквально несколько часов назад), инфу искал, читал, но как-то пока...

Выход из бесконечного цикла по нажатию кнопки. - C++
Привет всем. как можно выйти из такого цикла по нажатию какой любой кнопки (например Esc) int main(){ while(1){ ...

Подскажите пожалуйста как избавиться от бесконечного цикла? - C++
Код элемент функции int value = 1, grade = 1; double mean, total = 0; cout &lt;&lt; &quot;При окончание ввода оценок введите \&quot;End\&quot;&quot; &lt;&lt;...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
28.02.2012, 12:13     не работает проверка бесконечного цикла #2
Выражение
temporary >= 16 && temporary <= 100
истина для значений от 16 до 100.
Т.е. при них цикл будет повторяться,
а для остальных - завершаться.
Я думаю, предполагалось наоборот
temporary < 16 || temporary > 100
shadowstar
1 / 1 / 0
Регистрация: 28.02.2012
Сообщений: 20
28.02.2012, 12:21  [ТС]     не работает проверка бесконечного цикла #3
Добавлено через 27 секунд
Цитата Сообщение от zss2 Посмотреть сообщение
Выражение
temporary >= 16 && temporary <= 100
истина для значений от 16 до 100.
Т.е. при них цикл будет повторяться,
а для остальных - завершаться.
Я думаю, предполагалось наоборот
temporary < 16 || temporary > 100
сделал пропустило 10 которая не в диапазоне(((

Добавлено через 5 минут
Цитата Сообщение от shadowstar Посмотреть сообщение
Добавлено через 27 секунд


сделал пропустило 10 которая не в диапазоне(((
сори.....сделал как говорили работает но.......при вводе буквы зависает((
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
28.02.2012, 12:25     не работает проверка бесконечного цикла #4
Да НЕТ же при отрицании выражения И меняется на ИЛИ:
temporary >= 16 || temporary <= 100
shadowstar
1 / 1 / 0
Регистрация: 28.02.2012
Сообщений: 20
28.02.2012, 12:32  [ТС]     не работает проверка бесконечного цикла #5
Цитата Сообщение от zss2 Посмотреть сообщение
Да НЕТ же при отрицании выражения И меняется на ИЛИ:
temporary >= 16 || temporary <= 100
спс.....но я все же не понимаю почиму зависает при вводе буквы??((((

Добавлено через 1 минуту
Код
void record_sex () // метод_записи_пола_студента
	{
		int temporary;
		cout << "1 = man, 2 = women\n";
		do
		{
			cin >> temporary;
			if (temporary < 1 && temporary > 2){cout << "Error: an incorrect value\n";}
		}while (temporary == 1 || temporary == 2);
		sex = temporary;
	};
а тут проходит проверка при любом значении........как так?? и сообщение при ошибке не выскакивает(((
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
28.02.2012, 12:34     не работает проверка бесконечного цикла #6
При вводе телефона
C++
1
2
3
4
5
                double temporary = 0;
                do
                {
                        cin >> temporary ;
                }while (temporary > 0);
цикл завершится при вводе неположительного числа.
Не думаю, что это имелось ввиду

Добавлено через 1 минуту
Номер группы и пол - такие же ошибки
shadowstar
1 / 1 / 0
Регистрация: 28.02.2012
Сообщений: 20
28.02.2012, 12:39  [ТС]     не работает проверка бесконечного цикла #7
Цитата Сообщение от zss2 Посмотреть сообщение
При вводе телефона
C++
1
2
3
4
5
                double temporary = 0;
                do
                {
                        cin >> temporary ;
                }while (temporary > 0);
цикл завершится при вводе неположительного числа.
Не думаю, что это имелось ввиду

Добавлено через 1 минуту
Номер группы и пол - такие же ошибки
стоп........если условие истинно цикл прекращается??? по моему так)))
а у всех букв при преобразовании в int положительные значения)))

Добавлено через 1 минуту
Цитата Сообщение от shadowstar Посмотреть сообщение
стоп........если условие истинно цикл прекращается??? по моему так)))
а у всех букв при преобразовании в int положительные значения)))
i=0;
do{
mas[i] = mas[i]+5;
i++;
}while(i<5);- цикл выполняется пока условие ложно

Добавлено через 41 секунду
Цитата Сообщение от shadowstar Посмотреть сообщение
стоп........если условие истинно цикл прекращается??? по моему так)))
а у всех букв при преобразовании в int положительные значения)))

Добавлено через 1 минуту


i=0;
do{
mas[i] = mas[i]+5;
i++;
}while(i<5);- цикл выполняется пока условие ложно
что я путаю???
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
28.02.2012, 12:41     не работает проверка бесконечного цикла #8
С точностью до наоборот.
Цикл выполняется пока условие ИСТИННО!!!!!

Добавлено через 35 секунд
Не путайте с Паскалевским repeat...until
shadowstar
1 / 1 / 0
Регистрация: 28.02.2012
Сообщений: 20
28.02.2012, 12:42  [ТС]     не работает проверка бесконечного цикла #9
Цитата Сообщение от zss2 Посмотреть сообщение
С точностью до наоборот.
Цикл выполняется пока условие ИСТИННО!!!!!

Добавлено через 35 секунд
Не путайте с Паскалевским repeat...until
респект...........ща бум править))))
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.02.2012, 12:45     не работает проверка бесконечного цикла #10
Цитата Сообщение от shadowstar Посмотреть сообщение
C
1
if (temporary < 1 && temporary > 2)
Назовите мне такое число, которое одновременно меньше единицы и больше двойки?
Цитата Сообщение от shadowstar Посмотреть сообщение
C
1
while (temporary == 1 || temporary == 2)
Цикл выполняется до тех пор, пока temporary равна единице или равна двойке. При вводе любого другого числа цикл завершается.
Цитата Сообщение от shadowstar Посмотреть сообщение
что я путаю???
Цитата Сообщение от shadowstar Посмотреть сообщение
цикл выполняется пока условие ложно
Именно это и путаете.
shadowstar
1 / 1 / 0
Регистрация: 28.02.2012
Сообщений: 20
28.02.2012, 12:47  [ТС]     не работает проверка бесконечного цикла #11
Цитата Сообщение от fasked Посмотреть сообщение
Назовите мне такое число, которое одновременно меньше единицы и больше двойки?

Цикл выполняется до тех пор, пока temporary равна единице или равна двойке. При вводе любого другого числа цикл завершается.


Именно это и путаете.
все спс огромное.........сделал))) но не пойму почиму зависает при вводе символа(буквы)
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.02.2012, 12:51     не работает проверка бесконечного цикла #12
Цитата Сообщение от shadowstar Посмотреть сообщение
а при вводе букв прыгает сразу на метод Print()
Скорее всего дело обстоит следующим образом. Поток ожидает ввода числа, но ему попадаются буквы. Ввод обрывается, но символы в потоке остаются. Эти самые символы и обрабатываются в последующих методах. (Там еще скорее всего остается символ перевода строки \n и он тоже обрабатывается). В результате программа переходит к методу Print. Поэтому либо вводите корректные данные, либо делайте проверку ввода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2012, 12:57     не работает проверка бесконечного цикла
Еще ссылки по теме:

опрос кода клавиши для остановки бесконечного цикла - C++
Доброй ночи. Курсовая работа на тему создания справочника по резисторам. Пытаюсь писать по кускам. фрагмент программы: ...

Вывод содержимого vector при наличии бесконечного цикла - C++
День добрый! Возникла проблема с выводом содержимого vector-а. Вот код: #include &lt;iostream&gt; #include &lt;vector&gt; std :: vector...

Прерывание бесконечного цикла с возвратом значения нажатой клавиши в main() - C++
Вкратце, в функции main() есть некий объект класса - scene, также есть бесконечно работающий цикл while(1), в котором вызывается...

Рекурсивный обход дерева папок и файлов - избавиться от бесконечного цикла - C++
Добрый день! Стоит задача рекурсивно обойти и сохранить имена папок и файлов в виде вектора. Моя рекурсивная функция работает не...


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

Или воспользуйтесь поиском по форуму:
shadowstar
1 / 1 / 0
Регистрация: 28.02.2012
Сообщений: 20
28.02.2012, 12:57  [ТС]     не работает проверка бесконечного цикла #13
Цитата Сообщение от fasked Посмотреть сообщение
Скорее всего дело обстоит следующим образом. Поток ожидает ввода числа, но ему попадаются буквы. Ввод обрывается, но символы в потоке остаются. Эти самые символы и обрабатываются в последующих методах. (Там еще скорее всего остается символ перевода строки \n и он тоже обрабатывается). В результате программа переходит к методу Print. Поэтому либо вводите корректные данные, либо делайте проверку ввода.
спс за ответ......вроде сделал уже не прыгает))) но учтем))))
Yandex
Объявления
28.02.2012, 12:57     не работает проверка бесконечного цикла
Ответ Создать тему
Опции темы

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