| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4317 人关注过本帖
标题:为什么我在自定义函数中使用for(int i=0;i<count;i++)会报错,跪求大佬解答 ...
只看楼主 加入收藏
lindawei
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-8-15
结帖率:100%
收藏
已结贴  问题点数:19 回复次数:10 
为什么我在自定义函数中使用for(int i=0;i<count;i++)会报错,跪求大佬解答。内附代码
程序代码:
/*输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。。*/
#include <stdio.h>
int exchange(int *num,int count)
{
    int max=num[0],min=num[0];
    int max_count,min_count;            //最值下标
    for(int i=1;i<count;i++)            //找到最大值下标
    {
        if(max<num[i])
        {
            max=num[i];
            max_count=i;
        }
    }
    for(int i=1;i<count;i++)            //找到最大值下标
    {
        if(min>num[i])
        {
            min=num[i];
            min_count=i;
        }
    }
    //交换
    int value=0;
    value=num[max_count];num[max_count]=num[0];num[0]=value;                //交换最大值
    value=num[min_count];num[min_count]=num[count-1];num[count-1]=value;    //交换最小值
    return num;
}        
int main()
{
    int *num;
    int count=0;
    char c=0;
    printf("输入数组(回车结束)\n");
    while(c='\n')
    {    
        scanf("%d",&num[count]);
        count++;
        c=getchar();
    }
    num=exchange(num,count);
    //输出数组
    for(int i=0;i<count;i++)
        printf("%d",num[i]);
}
搜索更多相关主题的帖子: for int count i++ num 
2018-08-19 16:56
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:4 
试试:
int i;
for(i=0;i<count;i++)
2018-08-19 20:03
zhangchm2018
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:32
专家分:129
注 册:2018-8-18
收藏
得分:4 
你的编译器支持不在代码开头处定义吗?看了你的程序,在代码块开头定义int i;也没什么问题
2018-08-19 20:57
Mr_doge
Rank: 5Rank: 5
等 级:贵宾
威 望:10
帖 子:159
专家分:385
注 册:2018-6-28
收藏
得分:4 
似乎for循环内声明变量是C11还是什么时候加入的新标准,如果是C99还是更早的标准的编译器就会报错,你可以试试将变量声明在进入for循环前完成声明(在for循环的语句完成初始化)
2018-08-19 22:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:4 
上个世纪的C99标准就可以了,你的编译器肯定晚于上个世纪末。
2018-08-20 08:25
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
收藏
得分:4 
问题1: return num;  该为  return 0;   
        num=exchange(num,count);  改为 exchange(num,count);

        num是数组名,你定义的返回类型为int,不能返回;并且你采用的是传地址的方式无需返回值,即可达到你的目的

问题2:  下面这段程序条件有误,while()括号内应该为 == 或 !=   其他情况暂不细说;   逻辑有误,照你的代码输入,若输入数组 1 2,需要输入 1 1 2 2
    while(c='\n')
    {   
        scanf("%d",&num[count]);
        count++;
        c=getchar();
    }
问题3:将int exchange(int *num,int count)函数内第二个for中的int去掉

      


126邮箱联系方式:no1xijin@126. com
2018-08-20 09:14
lindawei
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-8-15
收藏
得分:0 
回复 5楼 rjsp
我用的vc++6.0没这个问题吧
2018-08-20 09:47
lindawei
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-8-15
收藏
得分:0 
回复 6楼 no1xijin
如果我要是随机输入一个数组用什么方法比较好,就比如这个程序
2018-08-20 09:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
VC++6.0 是上个世纪1998年6月正式发布的。
另外,之前微软每年都要说一次自己无计划让VC支持C语言开发,一直说到2011年。
微软是中2011年才决定在未来的版本(VC++2013)开始逐步支持C语言的,但到目前VC++2019为止,依然是开始了个皮毛就动作了。

说回你的代码,
你的“最大”是指“第一个最大值”,还是“最后一个最大值”,还是“无所谓,随便哪个最大值”?
C中容器容量类型,及下标是 size_t 类型,不是 int 类型。你随便找个标准函数就能看出来了,比如 size_t strlen( const char *str );
交换的时候,如果num[0]存着最小值,你第一次交换已将最小值换走了,第二次交换的就不是最小值了。
main函数中,你将数据保存到num指向的内存中,可是num指向的内存在哪里?

如果你确定最大输入数量比较小,比如小于100,那么可以定义一个数组 int num[100];
如果你确定有最大输入数量,但数量比较大,比如一亿个,那么可以用malloc,int* num = malloc( 100000000*sizeof(int) );
如果最大输入数量无法确定,那么你得用“链表”之类的数据结构,在仓储不足时动态增加。
2018-08-20 12:17
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
收藏
得分:0 
回复 8楼 lindawei
随机是什么意思,数组随机大小,还是数组元素随机?

126邮箱联系方式:no1xijin@126. com
2018-08-20 13:50
快速回复:为什么我在自定义函数中使用for(int i=0;i<count;i++)会报错,跪求大佬 ...
数据加载中...
 
   



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

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