| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 522 人关注过本帖
标题:六个数比较输出最小数,请帮我看一下,哪里出错了,谢谢
只看楼主 加入收藏
kikokokoo
Rank: 2
等 级:论坛游民
帖 子:21
专家分:29
注 册:2011-8-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
六个数比较输出最小数,请帮我看一下,哪里出错了,谢谢
#include<stdio.h>
main()
{
    int a[6],min,i;
    for(i=0;i<6;i++)
    scanf("%d",&a[i]);
    min=a[0];
    for(i=0;i<6;i++)
    {    if(min>a[i+1])
            min=a[i+1];
    }
    printf("min is %d\n",min);
    system("pause");
}

最后的输出结果为-36(SCANF时没输入过这个数),请各位高手帮忙看一下是不是有逻辑性错误。
编译环境为WIN-TC,谢谢了
搜索更多相关主题的帖子: 谢谢 
2011-08-06 14:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
你看看你输入的数组序号,从0-5,在看循环中比较,是从哪到哪?最后的a[6]怎么来的?回头看定义int a[6],会有a[6]这个元素吗?

授人以渔,不授人以鱼。
2011-08-06 14:16
kikokokoo
Rank: 2
等 级:论坛游民
帖 子:21
专家分:29
注 册:2011-8-6
收藏
得分:0 
额,概念搞错,谢谢提醒
2011-08-06 14:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不是你概念搞错,确实是逻辑不细致。写程序的时候,自己在脑子中把程序运行一次,当自己是计算机,逐行逐行执行代码,这样自己就能检查出问题了。没有这种习惯,是学不会编程的。编程是什么?就是编制流程让计算机实现自己的意图,自己的意图,首先要搞明白,你写出min与a[i+1]比较的时候,自己就应该了解为什么要写i+1而不是i,如果写i+1,那么循环应从什么开始到什么结束,这些一系列的东西,都是在写代码时考虑的。学编程,就学这个。

授人以渔,不授人以鱼。
2011-08-06 14:26
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
收藏
得分:0 
逻辑错误了
当i=5时需要min和a[6]比较,但你设置的数组最大的是a[5],所以发生数组越界了,-36是内存中比a+5这个地址大且相邻的(也就是a+6)这个地址中的值。c语言对语法的限制不是很大,所以遇到这样的问题是不会报错的,改一下:
for(i=1;i<6;i++)
    {    if(min>a[i])
            min=a[i];
    }
2011-08-06 14:26
kikokokoo
Rank: 2
等 级:论坛游民
帖 子:21
专家分:29
注 册:2011-8-6
收藏
得分:0 
谢谢,知道了
2011-08-06 15:12
快速回复:六个数比较输出最小数,请帮我看一下,哪里出错了,谢谢
数据加载中...
 
   



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

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