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

Цикл и cin - C++

Восстановить пароль Регистрация
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
12.02.2014, 16:01     Цикл и cin #1
Здравствуйте. Уже сталкивался с подобной проблемой и никак не могу снова разобраться.

При втором проходе цикла в функции add_data() оператор switch автоматически определяет выбор. Если задан проход цикл в ф-ии по одному разу - все нормально.


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
void add_data(bop* ptr)
{
   int innerans=0;
   bool innerflag = 1;
   for(int i = 0; i < ans; ++i)
   {
      cin.get(); //!!!!!!!!!!!!!!!!!!!!!!
      cout << "Enter full name\n> ";
      cin.getline(ptr[i].fullname, strsize);
      cout << "Enter title\n> ";
      cin.getline(ptr[i].title, strsize);
      cout << "Enter bopname\n> ";
      cin.getline(ptr[i].bopname, strsize);
      cout << "What user prefers to name him?\n> " <<
      "1) fullname\t2) title\t3) bopname\n> ";
      while (innerflag)
      {
         cin >> innerans;
         switch (innerans)
         {
            case 1:
               ptr[i].preference = 1;
               break;
            case 2:
               ptr[i].preference = 2;
               break;
            case 3:
               ptr[i].preference = 3;
               break;
            default:
            continue;
         }
         innerflag = 0;
      }
   }
}
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
void show_data(bop* ptr)
{
   int innerans = 0;
   bool innerflag = 1;
   cout << "You want display by:\n1) by fullname\t2) by title\n"<<
   "3) by bopname\t4) user preference\n> ";
   while(innerflag)
   {
      cin >> innerans;
      switch (innerans)
         {
            case 1:
               for (int i = 0; i < ans; ++i)
                  cout << ptr[i].fullname << "; ";
               break;
            case 2:
               for (int i = 0; i < ans; ++i)
                  cout << ptr[i].title << "; ";
               break;
            case 3:
               for (int i = 0; i < ans; ++i)
                  cout << ptr[i].bopname << "; ";
               break;
            case 4:
               for (int i = 0; i < ans; ++i) {
                  if (ptr[i].preference == 1)
                     cout << ptr[i].fullname << endl;
                  else if (ptr[i].preference == 2)
                     cout << ptr[i].title << endl;
                  else if (ptr[i].preference == 3)
                     cout << ptr[i].bopname << endl;
                  else
                     cout << "|Unknown error|";
               }
               break;
            default:
               continue;
         }
      innerflag = 0;
   }
}
Миниатюры
Цикл и cin  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2014, 16:01     Цикл и cin
Посмотрите здесь:

C++ Объект cin и его метод cin.get()
C++ Ошибка ( cin.get и цикл )
C++ цикл while(cin)
C++ Цикл не останавливается на cin >> n; C++
цикл после cin C++
Что делает цикл "while(cin.getline(buf,l_buf))" ? C++
C++ Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами
C++ Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.02.2014, 16:29     Цикл и cin #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от andrejap Посмотреть сообщение
При втором проходе цикла в функции add_data() оператор switch автоматически определяет выбор.
Уверены, что до switch доходит? После первого прохода innerflag = 0, при втором - не будет захода в while().
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
12.02.2014, 16:34  [ТС]     Цикл и cin #3
Понял:
C++
1
for(int i = 0, innerflag = 1; i < ans; ++i, innerflag = 1)
Спасибо в который раз, alsav22!
Yandex
Объявления
12.02.2014, 16:34     Цикл и cin
Ответ Создать тему
Опции темы

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