| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 926 人关注过本帖
标题:大家帮我看看这段代码呗
只看楼主 加入收藏
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:4 
这丫的就是胡扯!

首先你应该这样改:
    if (scanf("%d", (int*)(array + i)) != 1)

然后你输入1.2是一个浮点类型
当你输入后,程序会从输入缓冲区中取数据:
取数据的依据是你输入的要求。。你要求%d,它就从缓冲区从左到右取(根据贪吃算法,尽可能多的向后去符合条件的)
先取出一个1,然后发现一个“.”不是整形的,就返回
返回scanf的返回值也是1,因为读入一个1
然后指针指向"."的下标,当第二次取得时候,发现是“.”不符合要求,因此没取到数据。
scanf就返回0

而且你可以试一下,你如果第二次%c的话就可以取出“.”符号

就缓冲区这一块问题比较多,这只是其中的一点
用C++的流控制就好多了
#include <stdio.h>


int main()
{
    int a;
    char b;

    scanf("%d",&a);
    scanf("%c",&b);

    printf("%d   %c\n",a,b);
    return 0;
}

这个程序你输入1.2结果a是1,b是“.”
而且如果你这样的话:
#include <stdio.h>


int main()
{
    int a;

    while(1)
    {
        scanf("%d",&a);
        printf("%d\n",a);
    }
    return 0;
}
当你输入1.2的时候会进入死循环结果输出都是1
原理和前面的一样,你取出1,后面的数字因为“.”不是整型而被阻断
而且局部变量没有覆盖a赋值,因此相当于每次scanf返回0,没有取到值,a的值也就没变,因此都是1





[ 本帖最后由 liufashuai 于 2013-8-22 23:44 编辑 ]

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-22 23:38
hchuan
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-8-21
收藏
得分:0 
感谢楼上指点
2013-08-31 20:05
快速回复:大家帮我看看这段代码呗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025329 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved