Как проверить, что ввод CIN пользователя слишком мал или слишком велик? - PullRequest
1 голос
/ 24 января 2012

это может быть простой вопрос, только для моей собственной информации.

я требую, чтобы у пользователя было 2 ввода.

как консоль C ++ знает, что пользователю не хватает1 ввод, когда пользователь нажал клавишу ввода / возврата или когда пользователь ввел более 3-х вводов?

спасибо за ответ.

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h> 
using namespace std; 

int main() 
{ 
   char hord;
   int x;
   char userInput[256] ;
   int value;

  cout<<"Please enter a ./Even mode number: "; 
  cin >> hord >> userInput;

  if(hord == 'd')
  {
    value = atoi(userInput);
    cout <<"Selected Base 10" << endl;
    if (value % 2) /*or *///(x & 1)
    printf("%d is an odd number d\n", value);
    else
    {
        printf("%d is an even number d\n", value);
    }
  }
  else if(hord =='h')
  {

   sscanf_s(userInput, "%x", &x);
    if (x % 2)
    {/*or *///(x & 1)
    printf("%d is an odd number h \n", x);
    }
    else
    {
        printf("%d is an even number h\n", x);
    }

  }
  else
  {
      printf("Incorrect mode given ");

  }

  cin.get();
  _getch(); 
  return 0;

}

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Вместо того, чтобы позволять пользователю вводить два значения в одной строке, запрашивайте у пользователя каждый ввод.

std::cout << "Enter the first value and press ENTER: ";
std::cin >> value1;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

std::cout << "Enter second value and press ENTER: ";
std::cin >> value2;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Это позволит пользователю знать, что он должен ввести два значения, и вы знаете, что у вас будет два значения. Вызов ignore должен пропустить возможные ненужные данные, которые пользователь записывает после значения.

Вы также должны убедиться, что пользователь дал вам действительные значения, и если нет, то попросите пользователя снова ввести значения.

1 голос
/ 24 января 2012

Следует помнить, что с точки зрения консольной программы ввод «пользователя» отсутствует, просто ввод. Программа не должна заботиться, когда есть больше ввода, и ждать, когда ее недостаточно. Ввод буферизуется в строке, поэтому пользователь должен нажать ввод, чтобы пропустить ввод, но «cin <<» разделяет ввод на основе пробела. <br> Если это не работает для вас (потому что приложение действительно ориентировано на пользователя), тогда вы должны использовать getline () и отдельный ввод самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...