结构体数组的插入与删除,插入部分结果总出错,请各位大神帮忙看一下

x519942447 2017-10-06 10:06:56
#include<stdio.h>
#include<string.h>
struct Student
{
int num;
char name[20];
int score;

};
int main()
{
struct Student stu[20]={{10101,"Zhao",89},{10102,"Qian" ,90},{10103,"Sun",93},{10104,"Li",94},
{10105,"Zhou",95},{10106,"Wu",96},{10107,"Zheng",97},{10108,"Wang",98},{10109,"Feng",99},{10110,"Cheng",100}};
int i;
printf(" 学号 姓名 成绩\n");
for(i=0;i<10;i++)
printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score);

printf(" ---要插入的数据下标---\n");
int a,j;

scanf("%d",&a);
stu[a].num=10113;
strcpy(stu[a].name ,"Chu");
stu[a].score =98;
for(i=0; i<11; i++) //不知道为啥结果总是被覆盖
{
if(i==a)
{
for( j=11; j>i; j--)
{
stu[j]=stu[j-1];
}
stu[i]=stu[a];
}
}
printf(" 学号 姓名 成绩\n");
for(i=0;i<11;i++)
printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score);

printf(" ---要删除的数据下标---\n");
int x;
scanf("%d",&x);
for(i=x;i<10;i++)
stu[i]=stu[i+1];
printf(" 学号 姓名 成绩\n");
for(i=0;i<9;i++)
printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score);


return 0;
}
...全文
327 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mk112255 2017-10-13
  • 打赏
  • 举报
回复
stu[a].num=10113; strcpy(stu[a].name ,"Chu"); stu[a].score =98; 直接修改了数据,怎么会不重复
自信男孩 2017-10-09
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>

struct Student
{
    int num;
    char name[20];
    int score;
};

#define MAX_STU_NUM 20

int get_cur_stu_num(struct Student *pstu);
void print_stu_info(struct Student *pstu, int nums);

int main()
{
    struct Student stu[MAX_STU_NUM] = {
        {10101, "Zhao", 89},
        {10102, "Qian", 90},
        {10103,"Sun",93},
        {10104,"Li",94},
        {10105,"Zhou",95},
        {10106,"Wu",96},
        {10107,"Zheng",97},
        {10108,"Wang",98},
        {10109,"Feng",99},
        {10110,"Cheng",100}
    };
    struct Student tmp;
    int i, j, a, x, cur_nums;

    cur_nums = get_cur_stu_num(stu);
    print_stu_info(stu, cur_nums);

    printf("   ---要插入的数据下标---\n");

    scanf("%d",&a);
    if (a > MAX_STU_NUM - 1) { /*check array's index*/
        printf("Overflow!\n");
        return 0;
    }
    tmp.num = 10113;
    strcpy(tmp.name ,"Chu");
    tmp.score  = 98;

    if (a > cur_nums) {
        stu[cur_nums] = tmp;
    }
    else {
        for (j = cur_nums + 1; j > a; j--)
            stu[j] = stu[j-1];
        stu[a] = tmp;
    }
    cur_nums++;

    print_stu_info(stu, cur_nums);

    printf("   ---要删除的数据下标---\n");
    scanf("%d",&x);
    if (x < cur_nums) {
        for (i = x; i < cur_nums; i++)
            stu[i] = stu[i+1];
    }
    cur_nums--;
    print_stu_info(stu, cur_nums);


    return 0;
}

int get_cur_stu_num(struct Student *pstu)
{
    int i;

    for (i = 0; i < MAX_STU_NUM; i++)
        if (pstu[i].num <= 0)
            break;

    return i;
}

void print_stu_info(struct Student *pstu, int nums)
{
    int i;

    printf("   学号    姓名   成绩\n");
    for(i=0;i<nums;i++)
        printf("%7d%8s%6d\n", pstu[i].num, pstu[i].name, pstu[i].score);
}
上面的代码是根据我的想法改的。可以参考一下; 如果直接将插入的数据放到数组里,肯定会将原来的数据覆盖,所以先要放到一个临时的变量里,然后在插入数组里。
kugeniha 2017-10-07
  • 打赏
  • 举报
回复
#include<stdio.h> #include<string.h> struct Student { int num; char name[20]; int score; }; int main() { struct Student stu[20]={{10101,"Zhao",89},{10102,"Qian" ,90},{10103,"Sun",93},{10104,"Li",94}, {10105,"Zhou",95},{10106,"Wu",96},{10107,"Zheng",97},{10108,"Wang",98},{10109,"Feng",99},{10110,"Cheng",100}}; int i; printf(" 学号 姓名 成绩\n"); for(i=0;i<10;i++) printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score); printf(" ---要插入的数据下标---\n"); int a,j; scanf("%d",&a); for(i=0; i<11; i++) //不知道为啥结果总是被覆盖 { if(i==a) { for( j=11; j>i; j--) { stu[j]=stu[j-1]; } stu[a].num=10113; strcpy(stu[a].name ,"Chu"); stu[a].score =98; } } printf(" 学号 姓名 成绩\n"); for(i=0;i<11;i++) printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score); printf(" ---要删除的数据下标---\n"); int x; scanf("%d",&x); for(i=x;i<10;i++) stu[i]=stu[i+1]; printf(" 学号 姓名 成绩\n"); for(i=0;i<9;i++) printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score); return 0; }

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧