| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 926 人关注过本帖
标题:大家帮我看看这段代码呗
只看楼主 加入收藏
hchuan
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-8-21
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:11 
大家帮我看看这段代码呗
从标准输入读入几个整数,放入array中,如果遇到输入错误就退出。
代码如下:
程序代码:
int len = 5, i;
int *array;
array = malloc(len * sizeof(int));
for (i = 0; i < len; i++)
{
    printf("#%d : ", i);
    if (scanf("%d", array + i) != 1)
    {
        puts("Error input number.");
        exit(EXIT_FAILURE);
    }
}

运行一次程序,出现如下的结果:
#0 : 1.2
#1 : Error input number.
可是我期待的结果应该是:
#0 : 1.2
Error input number.
有大神能帮我解释原因么?
2013-08-21 18:00
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:4 
scanf("%d"

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-21 18:07
丶弱水彡千
Rank: 5Rank: 5
来 自:地狱十九层
等 级:职业侠客
威 望:2
帖 子:203
专家分:369
注 册:2013-6-16
收藏
得分:4 
求教
#%d的#是个什么意思
不懂

这个怎么玩
2013-08-21 18:27
hchuan
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-8-21
收藏
得分:0 
就是输出一个#
2013-08-21 18:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:4 
建议对 scanf的返回值多做一些测试  

类似:
int j=scanf("%d", &len[i]) ;
        printf("#%5d : ", j);

DO IT YOURSELF !
2013-08-21 19:07
hchuan
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-8-21
收藏
得分:0 
按照楼上的意思,我试了下:
发现当我输入1.2时,数据读入错误,但它返回值是1,
只有在读第二个数的时候,返回值才会为0

请问什么办法让程序一旦发生读入错误就退出?
2013-08-21 19:49
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:4 
if (scanf("%d", array + i) != 1) // if (scanf("%d", array + i) )
     {
         puts("Error input number.");
         exit(EXIT_FAILURE);
     }
%d 代表输入整数,你输入浮点数类型会取整数,因此输入成功的返回值为1。
但是由于使用回车/cr作为结束符。那么这个/CR结束符会一直留在输入缓冲区,那么下次输入的时候遇到/CR 就会错误,返回EOF。所以应该清空缓冲区fflush(stdin)

C++菜鸟
2013-08-21 21:44
jg658237
Rank: 7Rank: 7Rank: 7
来 自:青藏高原
等 级:黑侠
帖 子:224
专家分:529
注 册:2013-8-8
收藏
得分:4 
表示不懂.

武功再高也怕菜刀.
2013-08-22 11:54
jg658237
Rank: 7Rank: 7Rank: 7
来 自:青藏高原
等 级:黑侠
帖 子:224
专家分:529
注 册:2013-8-8
收藏
得分:0 
if (scanf("%d", array + i) != 1)    //少一个括号,你仔细看看吧

武功再高也怕菜刀.
2013-08-22 15:34
hchuan
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-8-21
收藏
得分:0 
比较同意7楼的说法
2013-08-22 19:11
快速回复:大家帮我看看这段代码呗
数据加载中...
 
   



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

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