如何检查用户CIN输入是否太少或太多?

时间:2012-01-24 07:40:22

标签: c++ visual-c++ logic

这可能是一个简单的问题,只是为了我自己的信息。

我要求用户输入2个。

当用户按下回车键或用户输入的输入超过3时,C ++控制台如何知道用户缺少1个输入?

感谢您的回答。

#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 个答案:

答案 0 :(得分:2)

不是让用户在一行上输入两个值,而是提示用户输入每个输入。

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 :(得分:1)

要记住的是,从控制台程序的角度来看,没有“用户”输入,只是输入。程序不应该关注何时有更多的输入并且在没有足够的时候等待。输入是行缓冲的,因此用户必须按Enter才能传递输入,但“cin&lt;&lt;”根据空格分隔输入 如果这对你不起作用(因为应用程序真的是面向用户的),那么你应该自己使用getline()和separate输入。