s1e13
#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>
页:
[1]