|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <math.h>
int main()
{
int ch;
int num = 0;
printf("请输入待转换的字符串:");
while((ch = getchar()) != '\n')
{
if(ch <= '9' && ch >= '0' && num <= pow(2,15) - 1 && num >= pow(-2, 15) - 1)
{
num = num * 10 + (ch - '0');
printf("结果是%d", num);
}
else if(num >= pow(2,15) - 1 && num <= pow(-2,15) - 1)
{
printf("数据超出范围,结果未定义!\n");
}
else if(ch <= 48 && ch >= 57)
{
printf("并未找到任何数值!\n");
}
if(num)
{
break;
}
}
请问一下我打的这些有问题吗?为什么达不到题目要求
A. 如果字符串中不存在任何表示数值的字符,则打印“并未找到任何数值”
B. 检测数值是否超出整型变量(int)可存放的范围,如果超出范围,则打印“数值超出范围,结果未定义!”的提醒。
C. 为了达到锻炼的效果,整型变量的范围需要自己计算,不使用 <limits.h> 头文件。
本帖最后由 jackz007 于 2021-10-21 03:39 编辑
- #include <stdio.h>
- bool notoverflow(int d , char c)
- {
- bool r = true ;
- int max = 0x7fffffff , min = 0x80000000 ;
- if((d > 0 && d * 10 + c < d) || (d < 0 && d * 10 - c > d)) r = false ;
- return r ;
- }
- int main(void)
- {
- char c ;
- int d , k ;
- bool f ;
- for(d = k = 0 , f = true ; (c = getchar()) != '\n' && f ;) {
- if(c >= '0' && c <= '9') {
- if(notoverflow(d , c - '0')) {
- d = d * 10 + c - '0' ;
- k ++ ;
- } else {
- f = false ;
- }
- } else {
- if(k) break ;
- }
- }
- if(k) {
- if(f) printf("%d\n" , d) ;
- else printf("数值溢出 !\n") ;
- } else {
- printf("没有输入任何数字.\n") ;
- }
- }
复制代码
编译、运行实况
- D:\00.Excise\C>g++ -o x x.c
- D:\00.Excise\C>x
- ABCD
- 没有输入任何数字.
- D:\00.Excise\C>x
- 12345678
- 12345678
- D:\00.Excise\C>x
- ABCDE12345678901234567890
- 数值溢出 !
- D:\00.Excise\C>x
- 123456778
- 123456778
- D:\00.Excise\C>x
- 2147483647
- 2147483647
- D:\00.Excise\C>x
- 2147483648
- 数值溢出 !
- D:\00.Excise\C>
复制代码
|
|