LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 670|回复: 3

函数调用的小问题

[复制链接]
发表于 2004-8-17 17:38:46 | 显示全部楼层 |阅读模式
请问,下面的代码为何得不到正确结果?
是函数调用的问题么?
#include <stdio.h>
#define DATATYPE1 int
#define MAXSIZE 100

typedef struct
{
        DATATYPE1 datas[MAXSIZE];
        int last;
}SEQUENLIST;

void insert(SEQUENLIST a,DATATYPE1 x,int i);

int main(){
        int i,locate;
        SEQUENLIST order_list;
        DATATYPE1 data;

        printf("请输入顺序表长度:");
        scanf("%d",&order_list.last);
        printf("初始化该顺序表,即分别赋值\n");
        for(i=0;i<order_list.last;i++)
                scanf("%d",&order_list.datas);
        printf("打印该顺序表\n");
        for(i=0;i<order_list.last;i++)
                printf("b.data[%d]=%d\n",i,order_list.datas);
        printf("请输入你要插入的数据:");
        scanf("%d",&data);
        printf("请输入你要插入的位置:");
        scanf("%d",&locate);
   
        //插入函数的调用
        insert(order_list,data,locate);


        printf("插入数据后结果为:\n");
        for(i=0;i<order_list.last;i++)
                printf("order_list.datas[%d]=%d\n",i,order_list.datas);
       
    return 0;
}

void insert(SEQUENLIST la,int x,int i)
//将新元素x插在顺序表a的第i(1<=i<=la.last+1)个元素的前面
{
        int k;
        if(i<1||i>la.last+1||la.last>=MAXSIZE)
    return ;
        else{
                for(k=la.last;k>=i;k--)
                        la.datas[k]=la.datas[k-1];
                la.datas[k]=x;
            la.last++;
        }
}
发表于 2004-8-17 17:52:10 | 显示全部楼层
[PHP]if((i<1||i>la.last+1||la.last)>=MAXSIZE)[/PHP]
这样呢?
发表于 2004-8-17 18:17:54 | 显示全部楼层

回复: 函数调用的小问题

这里是值传递,
在insert()里面对 la 值的修改不会影响main() 里的顺序表的值。
请你使用指针传递。

不知道偶说的对不对
请各位斧正

最初由 山河水 发表

void insert(SEQUENLIST la,int x,int i)
//将新元素x插在顺序表a的第i(1<=i<=la.last+1)个元素的前面
{
        int k;
        if(i<1||i>la.last+1||la.last>=MAXSIZE)
    return ;
        else{
                for(k=la.last;k>=i;k--)
                        la.datas[k]=la.datas[k-1];
                la.datas[k]=x;
            la.last++;
        }
}
发表于 2004-8-17 18:30:47 | 显示全部楼层
楼上说的没错

  1. #include <stdio.h>
  2. #define DATATYPE1 int
  3. #define MAXSIZE 100

  4. typedef struct
  5. {
  6.         DATATYPE1 datas[MAXSIZE];
  7.         int last;
  8. }SEQUENLIST;

  9. void insert([color=red]SEQUENLIST *la[/color],int x,int i)
  10. {
  11.         int k;
  12.         if(i<1||i>la[color=red]->[/color]last+1||la->last>=MAXSIZE)
  13.                 return ;
  14.         else{
  15.                 for(k=la->last;k>=i;k--)
  16.                         la->datas[k]=la->datas[k-1];
  17.                 la->datas[k]=x;
  18.                 la->last++;
  19.         }
  20. }

  21. int main(){
  22.         int i,locate;
  23.         SEQUENLIST order_list;
  24.         DATATYPE1 data;

  25.         printf("请输入顺序表长度:");
  26.         scanf("%d",&order_list.last);
  27.         printf("初始化该顺序表,即分别赋值\n");
  28.         for(i=0;i<order_list.last;i++)
  29.                 scanf("%d",&order_list.datas[i]);
  30.         printf("打印该顺序表\n");
  31.         for(i=0;i<order_list.last;i++)
  32.                 printf("b.data[%d]=%d\n",i,order_list.datas[i]);
  33.         printf("请输入你要插入的数据:");
  34.         scanf("%d",&data);
  35.         printf("请输入你要插入的位置:");
  36.         scanf("%d",&locate);

  37.         //插入函数的调用
  38.         insert([color=red]&order_list[/color],data,locate);

  39.         printf("插入数据后结果为:\n");
  40.         for(i=0;i<order_list.last;i++)
  41.                 printf("order_list.datas[%d]=%d\n",i,order_list.datas[i]);

  42.         return 0;
  43. }
复制代码

红色是修改的部分
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表