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

C 如果输入将被截断,如何测试比较?,c,integer,comparison,C,Integer,Comparison,所以我把一些东西转换成int,根据我的理解,int的最大值是32676,任何高于这个值的值都会在C中被截断 如果我的程序有用户输入数据,我如何检查这些数据是否可以完全存储在int中,因为如果不是,我需要告诉用户重新输入数据 例如,如果用户试图输入450000,我需要告诉他们重新输入数据,但是,一个简单的比较似乎会先截断值,然后再将其与INT_MAX进行比较。我建议将数据存储在允许更大值的类型中,例如长码或双码,具体取决于您输入的数据,然后在向下转换之前检查INT_MAX 可以找到类型限制的完整列

所以我把一些东西转换成int,根据我的理解,int的最大值是32676,任何高于这个值的值都会在C中被截断

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


例如,如果用户试图输入450000,我需要告诉他们重新输入数据,但是,一个简单的比较似乎会先截断值,然后再将其与INT_MAX进行比较。

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


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

更好的方法如下

将数字扫描为字符串,然后将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 ;
}
#包括
#包括
int main(){
char-lhs[200];
printf(“输入数字”);
扫描频率(“%s”,左侧);
char-rhs[200];
sprintf(rhs,“%d”,2147483647);
int rc=strcmp(左、右);
如果(rc==0)
printf(“[%s]等于[%s]\n”,左,右);
else if(rc<0)
printf(“[%s]大于[%s]\n”,左侧,右侧);
否则如果(rc>0)
printf([%s]小于[%s]\n],左侧,右侧);
返回0;
}

将其读入一个双精度:)然后进行比较虽然这对int情况有效,但我也有一种情况,即我正在读取一个无符号的long,我不能这样做,可以吗?我想我的答案将有助于添加一些代码来解释nice。但是如果您使用
INT\u MAX
作为
sprintf
的第三个参数会更好。另外,在
scanf
中使用
%199s
而不是
%s
,以防止缓冲区溢出。首先,我相信您已经交换了这里的条件,rc>0表示lhs大于rhs。第二,也是最重要的一点,字符串比较与数字比较有很大不同,例如“9”>“2147483647”,因为第一个字符“9”大于“2”。