如果输入将被截断,如何测试比较?
How to test comparison if input will be truncated?
所以我将一些东西转换为 int,据我所知,int 的最大值是 32676,超过这个值的任何值都将在 C 中被截断。
如果我的程序有用户输入数据,我如何检查这个数据是否可以完全存储在一个 int 中,因为如果不能,我需要告诉用户重新输入数据。
例如,如果用户试图输入 450000,我需要告诉他们重新输入数据,但是,一个简单的比较似乎先截断值再与 INT_MAX 比较?
我建议将数据存储在允许更大值的类型中,例如 long
或 double
,具体取决于您输入的数据,然后在转换前检查 INT_MAX
下来。
可以找到类型限制的完整列表 here。
更好的方法如下
将数字扫描为字符串,然后将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,据我所知,int 的最大值是 32676,超过这个值的任何值都将在 C 中被截断。
如果我的程序有用户输入数据,我如何检查这个数据是否可以完全存储在一个 int 中,因为如果不能,我需要告诉用户重新输入数据。
例如,如果用户试图输入 450000,我需要告诉他们重新输入数据,但是,一个简单的比较似乎先截断值再与 INT_MAX 比较?
我建议将数据存储在允许更大值的类型中,例如 long
或 double
,具体取决于您输入的数据,然后在转换前检查 INT_MAX
下来。
可以找到类型限制的完整列表 here。
更好的方法如下
将数字扫描为字符串,然后将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 ;
}