验证用户输入。输入是整数吗?C++

19 浏览
0 Comments

验证用户输入。输入是整数吗?C++

我正在输入这个,并且它要求用户输入两个整数,然后它们将成为变量。从那里开始,它将执行简单的操作。

我该如何让计算机检查输入的内容是否为整数?如果不是,是否可以要求用户重新输入一个整数?例如:如果有人输入"a"而不是2,那么它将告诉他们重新输入一个数字。

谢谢

0
0 Comments

在C++中,验证用户输入的有效性是一个常见的问题。特别是在需要判断用户输入是否为整数时,需要使用特定的方法来解决。

问题的原因是用户输入的数据类型通常是字符串,而我们需要将其转换为整数。为了解决这个问题,可以使用一个函数来将字符串转换为指定的数据类型。下面是一个常用的函数示例:

template <typename T>
auto string_to( const std::string & s )
{
  T value;
  std::istringstream ss( s );
  return ((ss >> value) and (ss >> std::ws).eof())  // 尝试转换
    ? value                                         // 转换成功
    : std::optional<T> { };                         // 转换失败
}

这个函数将字符串转换为指定的数据类型,并返回转换后的值。如果转换成功,则返回转换后的值;如果转换失败,则返回一个空的std::optional类型。当然,你也可以根据实际情况选择抛出异常或返回默认值。

下面是一个使用这个函数的示例:

int n;
std::cout << "n? ";
{
  std::string s;
  getline( std::cin, s );
  auto x = string_to <int> ( s );
  if (!x) return complain();
  n = *x;
}
std::cout << "将这个数乘以7得到 " << (7 * n) << ".\n";

在这个示例中,用户输入的字符串通过getline()函数获取并传递给string_to()函数进行转换。如果转换成功,则将转换后的值赋给变量n;如果转换失败,则返回错误。

需要注意的是,为了使转换函数正常工作,需要保证能够从流中准确提取出指定的数据类型。另外,还需要注意一些数据类型之间的包含关系。例如,如果需要区分intdouble类型,应该先检查是否为int,因为可以转换为int的数据也可以转换为double

通过以上方法,我们可以验证用户输入是否为整数,并进行相应的处理。这种方法可以确保程序在处理用户输入时更加健壮和可靠。

0