我需要检查用户是否输入了像1,15,-1这样的整数或者像2bda或5afnd等字符串。可以通过使用字符串轻松完成。
可以使用c或c ++中的int变量吗?
答案 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
变量来扫描数据2bda
或5try
时,第一个整数才会存储在该变量中。省略了剩余的输入,因为整数不能存储字符串&#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#
如果您的输入是纯字符串,则其完全未定义的行为!所以你不能这样做。