c++ - 使用整型变量检查用户输入是整数还是字符串

标签 c++ c

我需要检查用户是否输入了像 1,15,-1 这样的整数或像 2bda 或 5afnd 等字符串。可以通过使用字符串轻松完成。

可以在 C 或 C++ 中使用 int 变量来完成吗?

最佳答案

不,int 不能存储任意字符串。

int 是一个有符号整数类型,它保存的值介于某个最小值和最大值之间,具体取决于实现定义的大小。整数中没有内置错误状态或错误值(与具有非数字值 NaN 的浮点类型不同)。但是,您可以选择无效值,通常是最小值或最大值,或者如果只需要正值,则可以选择负值。然后您可以在处理之前检查该值。例如:

#include <climits> // for INT_MIN

bool is_valid( int value )
{
    return value != INT_MIN;
}

int get_value( const std::string& str_value )
{
    std::istringstream ss( str_value );
    int value;
    if( ss >> value )
        return value;
    else
        return INT_MIN;
}

void print_if_valid( int value )
{
    if( is_valid( value ) ) 
        std::cout << value << std::endl;
    else
        std::cout << "invalid" << std::endl;
}

int main()
{
    int num1 = get_value( "2" );
    int num2 = get_value( "a" );

    print_if_valid( num1 );
    print_if_valid( num2 );

    return 0;
}

请注意,使用此解决方案,如果该值实际上是 INT_MIN(如果 int 是 32 位,则为 -2147483648),它仍将被视为无效即使它是一个有效的int

关于c++ - 使用整型变量检查用户输入是整数还是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25293963/

相关文章:

c - 使用 sdl 进行像素操作

c - 未定义对 "tpl_map"的引用

c++ - 如何正确使用break命令?

c - Windows 中的 GCC 包括头文件

c++ - 调试器可以抑制哪些错误?

c++ - 台球游戏物理速度计算问题

c - 从微 Controller 的内部闪存读取

c - malloc + size_t * 3 的地址是否为任何类型对齐?

c++ - 函数指针?

c++ - 我可以向编译器查询 C++0x "alignas"支持吗?