C++ Фильтрацию данных

AZA

/reset
Сообщения
883
Реакции
162
Приветствую,возникла проблем фильтрации данных на c++ в коносли.
Требуется добиться, ввод только цифр больше ничего.В интернете очень много варинтов, но на mac os не робят. Работают,но с багами по сравнению с windows там все чик-чик.
Вариации кода фильтрации которые не работают адекватно.

1.
C-подобный:
int zero;
    
        while(!(std::cin>>zero) && !isdigit(zero) ){
            std::cout << "Не корректный ввод" << std::endl;
            std::cin.clear();
            fflush(stdin);
        }
Бесконечный цикл.
2.
C-подобный:
int zero;
  std::cin>>zero;
      while((zero >= '0') && (zero <= '9')  ){
          std::cout << "Не корректный ввод" << std::endl;
          std::cin.clear();
          fflush(stdin);
          std::cin>>zero;
      }
На этом примере понял, как в mac os(Xcode быть точнее) преобразование происходит, если ввести любую строку, то получим 0 всегда,а не как на винде по таблице ASCII происходит преобразование.
3.
C-подобный:
int zero;
    
        
std::cin>>zero;
   while( !isdigit(zero) ){
       std::cout << "Не корректный ввод" << std::endl;
       std::cin.clear();
       fflush(stdin);
       std::cin>>zero;
   }
Бесконечный цикл.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,927
  • Команда форума
  • #2
Так если указывается тип переменной int, то язык должен сам преобразовать ввод к этому типу, не?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #3
@vaxa, я бы получал как строку, проходил по символам, проверял все ли символы цифры, а затем преобразовывал бы в инт
 

AZA

/reset
Сообщения
883
Реакции
162
@vaxa, я бы получал как строку, проходил по символам, проверял все ли символы цифры, а затем преобразовывал бы в инт
Ох,слишком много лишних действий:)Ну попробую завтра,как ты предлагаешь.Если будет единственный вариант.
--- Добавлено позже ---
@Kr1kuzya, Совершено на оборот, вот то что ты ввел символ он преобразует по таблице ASCII,ну то есть к примеру вел ты "A" смотрим по таблице
http://cppstudio.com/post/276/ значение 65 и оно будет int'овой.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,927
  • Команда форума
  • #5
@vaxa, моя Убунту так не считает.
upload_2018-2-9_22-10-34.png
 

Kuntsaito

Участник
Сообщения
76
Реакции
31
значение 65 и оно будет int'овой
Не будет, пока не приведешь тип char к типу int через каст например.

А задачку можно легко через getch решить, не применяя массив, если нужно только ввод с клавиатуры проверять.
 
Сверху Снизу