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

时间:2014-08-13 18:51:49

标签: c++ c

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

可以使用c或c ++中的int变量吗?

5 个答案:

答案 0 :(得分:2)

不,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

答案 1 :(得分:1)

以字符串形式读取输入。尝试各种解析。

char buffer[100];
fgets(buffer, sizeof buffer, stdin);
errno = 0;
char *endptr;
long i = strtol(buffer, &endptr, 10);
if (errno == 0 && *endptr == '\n') {
  Handle_Integer(i);
}
else {
  HandleInputAsString(buffer);
}

答案 2 :(得分:0)

你可以使用atoi或stoi功能: Convert string to int C++

如果函数stoi无法将字符串转换为int,则会抛出异常,在这种情况下,您可以假设它是一个字符串。 http://en.cppreference.com/w/cpp/string/basic_string/stol

答案 3 :(得分:0)

根据我的拙见,您可以使用boost::lexical_cast有效地将用户输入转换为数字输入:

#include <boost/lexical_cast.hpp>
#include <iostream>

int main() {
  std::string input;
  std::getline(std::cin, input);
  int i(0);
  try {
    i = boost::lexical_cast<int>(input);
  } catch(const boost::bad_lexical_cast &) {
    std::cout << "Wrong Input!" << std::endl;
  }
  std::cout << i << std::endl;
  return 0;
}

答案 4 :(得分:0)

没有。无法使用int数据类型检查输入的输入是整数还是字符串。因为当您使用int变量来扫描数据2bda5try时,第一个整数才会存储在该变量中。省略了剩余的输入,因为整数不能存储字符串&#39; s。

示例程序 -

#include<stdio.h>
int main()
{
        int num1,num2,ret;
        printf("Enter the integer\n");
        scanf("%d",&num1);

        printf("%d\n",num1);
        return 0;
}

测试1:

root@ubuntu:~/c/array/string# ./a.out 
Enter the integer
123
123

当您输入整数作为输入时,您将获得正确的输出。

测试2:

root@ubuntu:~/c/array/string# ./a.out 
Enter the integer
2bda
2

只需要第一个整数,省略剩余。结果未定义。

测试3:

root@ubuntu:~/c/array/string# ./a.out 
Enter the integer
bdas2
-1217114112
root@ubuntu:~/c/array/string# 

如果您的输入是纯字符串,则其完全未定义的行为!所以你不能这样做。