判断是否*char



我得到了这个代码:

char a[151];
scanf ("%150s", a);

a中可以是一个数字,如果是,我需要确定,如果a < INT_MAX。我不知道怎么做,因为在a char的每个索引中可以是一个数字,它意味着150位数字,如果我将一个值存储到int或其他任何东西中,可能会导致溢出。有什么建议吗?

呼叫strtol(),测试errno

如果正确的值在可表示值范围之外,则LONG_MIN, LONG_MAX,…宏ERANGE的值存储在errno中。C11dr§7.22.1.4 8

char a[151];
scanf ("%150s", a);
char *endptr;
errno = 0;
long num = strtol(a, &endptr, 10);
if (errno == ERANGE) Overflow();  // outside `long` range
if (num > INT_MAX) Overflow();    // greater than `INT_MAX`

一种解决方法:

1. INT_MAX = 2147483647 --> contains 10 digits  
2. len = strlen(a);  
3. if (len > 10)   
   a. true --> then a > INT_MAX --> print answer and return  
   b. false, go to step 4  
4. if (len < 10)  
   a. true --> then a < INT_MAX --> print answer and return  
   b. false, go to step 5  
5. (len == 10) case  
6. if (a[9]-'0' > 2) // 10th digit is > 2  
   a. true --> then a > INT_MAX --> print answer and return  
   b. false, go to step 7  
7. int num = atoi(a);  
9. Compare num and INT_MAX and print answer and return  

[注:这里不考虑负数]

最新更新