验证用户输入。输入是整数吗?C++
在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
;如果转换失败,则返回错误。
需要注意的是,为了使转换函数正常工作,需要保证能够从流中准确提取出指定的数据类型。另外,还需要注意一些数据类型之间的包含关系。例如,如果需要区分int
和double
类型,应该先检查是否为int
,因为可以转换为int
的数据也可以转换为double
。
通过以上方法,我们可以验证用户输入是否为整数,并进行相应的处理。这种方法可以确保程序在处理用户输入时更加健壮和可靠。