C之行(2):C primer plus的第八题

C primer plus的第八题
一道让我郁闷的题
 
本以为判断是数字还是字符串应该很容易
结果折腾了半天才搞定,Orz
 
C语言虽说是高级语言,但很多小事还得自己做
 
isdigit():只能判断单个字符,你输入个带小数点或正负号的,它就判断不来了
所以哦,还得自己动手丰衣足食
 
scanf有个状态返回值,读取的值正确,返回1;错误的,不等于1就是了
那就让她读取浮点数了,代码如下:
 
if(t == 1)
        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 ");
}
 
把他封装到一个函数里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 " ); 
运行后,你就会发现的确有个'/n',是它!致使 while (scanf("%f", &num) != 1) 陷入死循环的。
既然知道了,那就让利用getchar()读走那个'/n'。
正好我们也需要getchar()来读取scanf输入的错误数据,然后给显示出来。
至此,此题算是解了。
ps:
学C,不容易啊!
朋友告诉我,至少要过半年深山老林的生活
哈~~我住的地方就是四面环山,看来地利是有了
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值