| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1059 人关注过本帖
标题:这个程序为什么很不稳定,有时候成功有时候执行错误
只看楼主 加入收藏
llp108
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-11-15
结帖率:25%
收藏
 问题点数:0 回复次数:5 
这个程序为什么很不稳定,有时候成功有时候执行错误
对n个整数进行排序的程序
#include "stdio.h"
#define N 100
main()
{void sort(int**p,int n);
 int a[N],i,*p[N],**pointer,n;
 printf("请输入要对几个数进行排序:");
 scanf("%d",&n);
 printf("请输入要排序的数:\n");
 for(i=0;i<n;i++)
     p[i]=a+i;
 for(i=0,pointer=p;i<n;i++,pointer++)
     scanf("%d",*pointer);
 pointer=p;//在进行函数处理前先让其回到初始地点//   
 sort(pointer,n);   
}
void sort(int**p,int n)
{int i,j,*temp;
 for(j=1;j<n;j++)
    {for(i=0;i<n-j;i++)
        if(**p>=**(p+1))
          {temp=*p;*p=*(p+1);*(p+1)=temp;p++;}
     p=p-(n-j);}  //每比完1论让指针回归//   
 printf("排序后的数字顺序是:\n");
 for(i=0;i<n;i++)
     printf("%d  ",**p++);
}
搜索更多相关主题的帖子: pointer include 
2007-12-30 13:19
hangeng
Rank: 2
等 级:论坛游民
帖 子:424
专家分:39
注 册:2007-7-23
收藏
得分:0 
不要重复发帖!

帖一:[url]http://bbs.[/url]
帖二:[url]http://bbs.[/url]

  雨水冲不进窗来,在玻璃上痛哭。但它至少奋斗过。
2007-12-30 13:28
llp108
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-11-15
收藏
得分:0 
网线断了以下 以为没发成功 不好意思
2007-12-30 13:44
llp108
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-11-15
收藏
得分:0 
已经知道了程序有错误,错误在ju色那里
void sort(int**p,int n)
{int i,j,*temp;
for(j=1;j<n;j++)
    {for(i=0;i<n-j;i++)
        if(**p>=**(p+1))
          {temp=*p;*p=*(p+1);*(p+1)=temp;p++;}
     p=p-(n-j);}  //每比完1论让指针回归//   
printf("排序后的数字顺序是:\n");
for(i=0;i<n;i++)
     printf("%d  ",**p++);
}
应该把p++放在if语句范围之外

[[italic] 本帖最后由 llp108 于 2007-12-30 23:22 编辑 [/italic]]
2007-12-30 14:38
布拉莫斯
Rank: 1
来 自:中国太平洋舰队
等 级:新手上路
帖 子:169
专家分:0
注 册:2007-3-31
收藏
得分:0 
我认为问题出现在这里。。 **pointer; 这个二级指针。。

for(i=0,pointer=p;i<n;i++,pointer++)
     scanf("%d",*pointer);    //  像(pointer+i)所代表空间, 楼主事先并没有申请就进行
                       //对其读写。这样的操作,在大多数的时候是非法的,因为你
                       // 有可能覆盖其它进程的数据。
楼主对pointer 进行申请一块内存后再读写, 应该就没有错了。。

真理往往掌握在少数人手中,可现实却是少数服从多数!
2007-12-30 17:47
llp108
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-11-15
收藏
得分:0 
已经知道了程序有错误,错误在红色那里
void sort(int**p,int n)
{int i,j,*temp;
for(j=1;j<n;j++)
    {for(i=0;i<n-j;i++)
        if(**p>=**(p+1))
          {temp=*p;*p=*(p+1);*(p+1)=temp;p++;}
     p=p-(n-j);}  //每比完1论让指针回归//   
printf("排序后的数字顺序是:\n");
for(i=0;i<n;i++)
     printf("%d  ",**p++);
}
应该把p++放在if语句范围之外,因为p++在if范围内所以当你输入5,4,3,2,1时就正确,输入5,4,3,1,2时就错误
用二及指针就是为了对指针进行一下练习

[[italic] 本帖最后由 llp108 于 2007-12-31 20:14 编辑 [/italic]]
2007-12-31 20:03
快速回复:这个程序为什么很不稳定,有时候成功有时候执行错误
数据加载中...
 
   



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

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