C primer plus的第八题
一道让我郁闷的题
本以为判断是数字还是字符串应该很容易
结果折腾了半天才搞定,Orz
C语言虽说是高级语言,但很多小事还得自己做
isdigit():只能判断单个字符,你输入个带小数点或正负号的,它就判断不来了
所以哦,还得自己动手丰衣足食
scanf有个状态返回值,读取的值正确,返回1;错误的,不等于1就是了
那就让她读取浮点数了,代码如下:
if(t == 1)
printf("Enter first nubmer:");
elseif(t ==2)
printf("Enter second nubmer:");
printf("Enter first nubmer:");
elseif(t ==2)
printf("Enter second nubmer:");
while
(scanf(
"
%f
"
,
&
num)
!=
1
)
{
printf("Please enter a number, such as 3.5, -1.78E8, or 6 ");
}
{
printf("Please enter a number, such as 3.5, -1.78E8, or 6 ");
}
把他封装到一个函数里getNumber(int t)
调试,第二次,故意输入错误的数据,俺的GOD啊,死循环!!??why?
很怪异!太晚了,明天再分析了。。。
继续:
搞定!
原来scanf来输入数据后,字符"/n"是怎么被处理的?看下面:
float
t;
char ch;
printf( " Enter a Number: " );
scanf( " %f " , & t);
if ((ch = getchar()) == '/n ' )
printf( " / '//n/' is here " );
char ch;
printf( " Enter a Number: " );
scanf( " %f " , & t);
if ((ch = getchar()) == '/n ' )
printf( " / '//n/' is here " );
运行后,你就会发现的确有个'/n',是它!致使 while (scanf("%f", &num) != 1) 陷入死循环的。
既然知道了,那就让利用getchar()读走那个'/n'。
正好我们也需要getchar()来读取scanf输入的错误数据,然后给显示出来。
至此,此题算是解了。
ps:
学C,不容易啊!
朋友告诉我,至少要过半年深山老林的生活
哈~~我住的地方就是四面环山,看来地利是有了