我有一段代码,它使用scanf读取一个整数,并通过查看缓冲区来检查它是否真的是一个整数。
int e_1;
char c[1];
// noNeedToCleanBuffer is used to avoid buffer cleaning the first time.
int noNeedToCleanBuffer = 1;
do {
// Clears the buffer.
if (!noNeedToCleanBuffer)
while ((c[0] = getchar()) != 'n') ;
noNeedToCleanBuffer = 0;
printf("Input an integer value: n");
e_1 = scanf("%d", &n);
c[0] = getchar();
} while ((e_1 != 1 && c[0] != 10) || (e_1 == 1 && c[0] != 10));
然而,我不知道如何检查输入是否在INT_MIN和INT_MAX之间(我从limites.h中得到这些)
我想把这个数字作为一个字符串,并将其与表示INT_MIN和INT_MAX的两个字符串进行比较,但由于我使用的是标准c99,所以不允许使用atoi()或itoa()。
如果你真的只想检查存储它-
1.)长期储存,然后检查
2.)将数字存储在字符串中,然后通过获取每个数字并存储在字符串,然后使用strcmp()将INT_MAX转换为字符串
num = INT_MAX;
i = 0;
while(num != 0){
str[i] = num % 10;
num = num / 10;
i++;
}
这个字符串中的数字是相反的,你可以通过一个简单的循环很容易地将其反转
然后使用strcmp();
使用s
转换说明符和scanf
读取字符串,并使用strtol
函数检查数字。
strtol
允许您首先检查数字的格式是否正确(整数),以及它是否可以表示为long
整数- 然后检查
long
编号是否在INT_MIN
和INT_MAX
之间
任何给定数据类型(包括int
)的变量的值都将始终在该数据类型的范围内。这是由编译应用程序的平台定义和实施的。
如果你只想进行一个"证明"变量在你的类型范围内的练习,你必须将它强制转换为一个可以容纳更大范围值的类型的变量。例如:
int foo = /* some value to test */;
long bar = (long)foo;
if ( (bar < (long)INT_MIN) || (bar > (long)INT_MAX) ) return false;