如果输入被截断,如何测试比较?

时间:2015-03-12 04:10:06

标签: c integer comparison

所以我有一些转换为int的东西,根据我的理解,int的最大值是32676,高于此的任何值都将在C中被截断。

如果我的程序有用户输入数据,我如何检查这些数据是否可以完全存储在int中,因为如果不是,我需要告诉用户重新输入数据。

例如,如果用户尝试输入450000,我需要告诉他们重新输入数据,但是,在将它与INT_MAX进行比较之前,一个简单的比较似乎先截断该值?

2 个答案:

答案 0 :(得分:2)

更好的方法如下

将数字扫描为字符串,然后将INT_MAX转换为字符串。请使用itoa()

进行字符串比较,然后相应地打印一条消息。将它存储在任何int或float或任何东西中都没有问题。

编辑:添加了工作代码

#include<stdio.h>
#include <string.h>
int main(){
char lhs[200];
printf("enter the number");
scanf("%s",lhs); 
char rhs[200];
sprintf(rhs, "%d", 2147483647);
int rc = strcmp(lhs, rhs);
if(rc == 0)
    printf("[%s] equals [%s]\n", lhs, rhs);
else if(rc < 0)
    printf("[%s] more than [%s]\n", lhs, rhs);
else if(rc > 0)
    printf("[%s] less than [%s]\n", lhs, rhs);
return 0 ;
}

答案 1 :(得分:1)

我建议将数据存储在允许更大值的类型中,例如longdouble,具体取决于您输入的数据,然后在转换前检查INT_MAX

可以找到类型限制的完整列表here