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

来源:互联网 发布:发布报名互动网站源码 编辑:程序博客网 时间:2024/05/22 06:37
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,不容易啊!
朋友告诉我,至少要过半年深山老林的生活
哈~~我住的地方就是四面环山,看来地利是有了
 
原创粉丝点击