gpt4 book ai didi

c - 如何实现严格检查 getInt() 函数?

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:54 30 4
gpt4 key购买 nike

我编写了以下代码以从键盘获取整数。它会提示一条错误消息,直到您提供有效的整数值(负数或正数)。

一个条件是它必须检查所有可能的测试用例

喜欢:

-3.2 
5.0
984237.4329
0.343
.434
12344.
adfs34
233adds
3892710492374329
helloIamNotainteger

对于所有这些测试,它应该失败。它只会通过int >=INT_MIN && int <=INT_MAX。值(value)。

我的运行代码是:

#include<stdio.h>
#include<limits.h>

int min=INT_MIN;
int max=INT_MAX;

int main()
{
char str[50],c; //I have taken size 50 please ignore this
int check;
do
{
int flag=1,i=0,j=0,num=0;
check=0;
printf("Enter an Integer : ");
while((c=getchar())!='\n')
str[i++]=c;
if(str[0] == '-')
{
flag = -1;
j++;
}
for(;j<i;j++)
{
if(str[j] >= '0' && str[j] <= '9')
num=(str[j]-'0') + num*10;
else
break;

}
if(j<i)
{
printf("Not an Integer, Please input an integer \n");
}
else if(num < min || num >max)
{
printf("Integer is out of range,Please input an integer \n");
}
else
{
num *=flag;
printf("The given number is : %d\n",num);
check=1;
}
}while(check == 0);
return 0;

}

一个例子:对于这样的值。
83429439803248832409(它是整数,但由于范围的原因应该会失败)但它通过并给出其他一些整数值。

如何在我的代码中解决这个问题或实现更好的想法 getInt()

最佳答案

最简单的方法是使用标准库函数。

#include <limits.h>
#include <stdlib.h>

int getInt (const char *s)
{
long int n = strtol (s, NULL, 10);

if (n < INT_MIN || n > INT_MAX)
/* handle overflows */
else
return (int) n;
}

要处理其他错误,您可以使用多种条件。

#include <errno.h>

int getInt (const char *s, size_t size)
{
const char *pEnd1 = s + size;
char *pEnd2;
long int n;

errno = 0;

n = strtol (s, &pEnd2, 10);

if (n < INT_MIN || n > INT_MAX || errno != 0 || pEnd1 != pEnd2)
/* error */
else
return (int) n;
}

关于c - 如何实现严格检查 getInt() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288412/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com