| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 797 人关注过本帖
标题:大虾们帮我找找问题吧,我实在找不出来。。
只看楼主 加入收藏
ssdxpang
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2011-9-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
大虾们帮我找找问题吧,我实在找不出来。。
#include<stdio.h>
void main()
{
void inv(int *p,int n);
int a[3],i;
printf("请输入三个数:\n");
for(i=0;i<3;i++)
scanf("%d ",&a[i]);
inv(a,3);
}
void inv(int *p,int n)
{
int temp,i,j;
for(i=0;i<n;i++)
 temp=*(p+i);
for(j=i+1;j<n;j++)
{
 if(*(p+j)<*(p+i))
     temp=*(p+j);
     *(p+j)=*(p+i);
     *(p+i)=temp;
}
printf("The arr is:\n");
for(i=0;i<n;i++)
printf("%d ",*(p+i));
}


题目是:输入3个整数,按从小到大的顺序输出,要求用指针方法处理。
我编译的没有错误,但只能运行到输入三个数,然后就没下文了。。我不晓得哪里错了
搜索更多相关主题的帖子: void include 
2011-09-20 19:44
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 楼主 ssdxpang
for循环有问题

总有那身价贱的人给作业贴回复完整的代码
2011-09-20 20:49
ssdxpang
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2011-9-14
收藏
得分:0 
回复 2楼 embed_xuel
说的具体点呢,我看不出来哪里出了问题。。
而且运行之后很奇怪,提示我输入之后就没反应了。。
2011-09-20 21:24
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 楼主 ssdxpang
开头定义下int k; for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{ k=j;
if(*(p+k)<*(p+i))
  {   temp=*(p+k);
     *(p+k)=*(p+i);
     *(p+i)=temp;
} }

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-09-20 21:29
ssdxpang
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2011-9-14
收藏
得分:0 
回复 4楼 A13433758072
还是不行。。
2011-09-20 22:00
luosiye
Rank: 2
等 级:论坛游民
帖 子:15
专家分:39
注 册:2011-9-8
收藏
得分:0 
程序代码:
for(i=0;i<n;i++)
temp=*(p+i);
for(j=i+1;j<n;j++)
{
if(*(p+j)<*(p+i))
     temp=*(p+j);
     *(p+j)=*(p+i);
     *(p+i)=temp;
}
首先:j=i+1; 除非i是负数,否则*(p+j)<*(p+i)永远不成立,if语句也就没意义。
第二:if语句加上{...},否则,它只能管到它下面的一句,这是初学者最常犯的错。
第三:把函数原型放到main()函数外,这是常识,搞得我初一看,还以为是递归,吓我跳。
还有,如果以后从事软件开发的话,最好把代码写的可读性好点,这是一些小习惯,到了大工程就很重要了。
2011-09-20 22:16
mengcan555
Rank: 4
等 级:业余侠客
帖 子:104
专家分:253
注 册:2011-9-17
收藏
得分:0 
for(i=0;i<n;i++)
temp=*(p+i);
第一个for  循环没有大括号{},把下面都放到里面就好了
temp=*(p+i);
for(j=i+1;j<n;j++)
{
if(*(p+j)<*(p+i))
     temp=*(p+j);
     *(p+j)=*(p+i);
     *(p+i)=temp;
}
2011-09-20 22:20
luosiye
Rank: 2
等 级:论坛游民
帖 子:15
专家分:39
注 册:2011-9-8
收藏
得分:0 
以下是引用luosiye在2011-9-20 22:16:28的发言:

for(i=0;i
第一点不小心看错了,这里没问题,做交换的时候用传址交换,不要用传值交换,用传值交换的话,换了之后还是一样的。
2011-09-21 11:03
edwardflee
Rank: 4
等 级:业余侠客
帖 子:145
专家分:234
注 册:2011-7-27
收藏
得分:10 
回复 楼主 ssdxpang
scanf("%d ",&a[i]);
这句,多了一个空格
另外,for和if缺大括号
程序代码:
#include<stdio.h>
void main()
{
    void inv(int *p,int n);
    int a[3],i;
    printf("请输入三个数:\n");
    for(i=0;i<3;i++)
        scanf("%d",&a[i]);            //这里%d后面别加空格
    inv(a,3);
}
void inv(int *p,int n)
{
    int temp,i,j;
    for(i=0;i<n;i++)
    {                                //这里应该加大括号
        temp=*(p+i);
        for(j=i+1;j<n;j++)
        {
            if(*(p+j)<*(p+i))
            {                        //这里也要大括号
                temp=*(p+j);
                *(p+j)=*(p+i);
                *(p+i)=temp;
            }
        }
    }
    printf("The arr is:\n");
    for(i=0;i<n;i++)
        printf("%d ",*(p+i));
}


[ 本帖最后由 edwardflee 于 2011-9-21 12:19 编辑 ]

学C的秘诀=每天都来泡论坛
2011-09-21 12:06
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:10 
程序代码:
#include<stdio.h>
void inv(int *p,int n);

int main()
{
    int a[3],i;
    printf("请输入三个数:\n");
    for(i=0; i<3; i++)
        scanf("%d",&a[i]);
    inv(a,3);
    return 0;
}
void inv(int *p,int n)
{
    int temp,i,j;

    for(i=0; i<n; i++)
        for(j=i+1; j<n; j++)
        {
            if(*(p+j)<*(p+i))
            {
                temp=*(p+j);
                *(p+j)=*(p+i);
                *(p+i)=temp;
            }
        }
    printf("The arr is:\n");
    for(i=0; i<n; i++)
        printf("%d ",*(p+i));
}

我们都在路上。。。。。
2011-09-21 12:15
快速回复:大虾们帮我找找问题吧,我实在找不出来。。
数据加载中...
 
   



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

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