Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Kibalchish
0 / 0 / 0
Регистрация: 02.05.2017
Сообщений: 10
1

Результат операции std::cin>>x и поведение при последующих попытках ввода

20.09.2017, 08:53. Просмотров 295. Ответов 1
Метки нет (Все метки)

Начну с того, что я пытаюсь сделать. При неудачном вводе значения объекта in типа double, например, попытка записать в него символ с клавиатуры, программа должна предлагать повторный ввод значения до тех пор, пока ввод не будет успешен.
Проблема состоит в том, что после неуспешного ввода символа в in, в последующих итерациях цикла операция std::cin>>in непонятно для меня себя ведёт - без какого-либо предложения ввода даёт результат false, тем самым получается бесконечный цикл.
Прошу объяснить такое поведение операции std::cin>>in и, по возможности, указать на недочёты.

Quad_Eq - класс для квадратных уравнений/полиномов
double c[3] - его член данных
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Quad_Eq::input()
 {
 std::cout<<"Input all coefficients of quadratic equation:\n";
 unsigned i=0;
 char c='a'-1;
 while(i<=2)
  {
  ++c;
  std::cout<<c<<'=';
  double in;
  if(!(std::cin>>in)||(coefs[i]=in,coefs[0]==0))
   {
   std::cerr<<"Invalid coeficient, try again:\n";
   --c;
   continue;
   }
  ++i;
  }
 }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2017, 08:53
Ответы с готовыми решениями:

Странное поведение операции XOR и std::cin
Объясните, пожалуйста, почему этот код работает правильно: /* Обмен значений двух переменных без...

Объяснить поведение объекта std::cin в цикле while
#include&lt;iostream&gt; #include&lt;string&gt; #include&lt;cstdlib&gt; #include&lt;windows.h&gt; using namespace std;...

Оператор std::cin выдает непредсказуемый результат
Здравствуйте! Пожалуйста, укажите на мою ошибку! Вот собственно, задание: &quot;Напишите функцию,...

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++...

Выяснить почему после ввода первого элемента массива цикл не работает (std::cin в цикле for)
Добрый день! Взялся за простой пример из книги Лафоре. #include &lt;iostream&gt; #include...

1
Kibalchish
0 / 0 / 0
Регистрация: 02.05.2017
Сообщений: 10
21.12.2018, 09:00  [ТС] 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
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <stdio.h>
 
using namespace std;
 
int main(int argc, char *argv[])
 { 
 for(;;)
  {
  ofstream fs;
  string fname;
  unsigned long long number, length;
 
  cout<<"write name:";
  while(!(cin>>fname)){}
  cout<<"file name is "<<fname<<'\n';
 
  fs.open(fname);
  if(fs.is_open())
   cout<<"opened\n";
  else
   cout<<"failed\n";
 
  cout<<"write number of sequances :";
  while(!(cin>>number)){}
 
  cout<<"write length (x31):";
  while(!(cin>>length)){}
  srand(time(nullptr));
 
  for(unsigned long long i=0;i<=number;++i)
   {
   for(unsigned long long j=0;j<=length;++j)
    {
    int rnum=rand();
//rand генерирует неотрицательные числа типа int, т.е. знакого типа,
//а значит мы имеем дело с со старшим битом знака, который всегда = 0,
//и записываем в файл только по 31 младший бит
    int mask=1073741824; //2^30
    while(mask!=0)
     {
     fs<<(rnum & mask ? '1' : '0');
     mask/=2;
     }
    }
   fs<<'\n';
   }
  fs.close();
  }
 return 0;
 }
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2018, 09:00

Как узнать, что есть данные для ввода, которые можно забрать std::cin
Всем здравствуйте! У меня есть параллельный поток, в котором нужно собирать данные с помощью...

При множественном наследовании не работает getline(std::cin, ?)
Изучаю множественное наследование, так вот, нужно ввести два слова, но программа просто пропускает ...

Поведение cin при вводе некорректного типа данных
Был создан цикл: while (err) //bool err = true { try { cin &gt;&gt; arrsz // int...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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