A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

程序删除数组中间的元素 写了算法 不执行没结果 求大牛指教  
//如果删除的元素是最后一个
        if(no==stuCount)
        {
            stuCount--;
            printf("删除成功\n");
        }
        else
        {
            for (int i=no; no<stuCount; i++)
            {
                stu[no-1]=stu[no];
               
            }
            stuCount--;
            printf("删除成功....\n");
        }
这一段如果当前输入的序号等于学生个数也就相当于数组最后的一个元素 ,删除没问题  但是else里面算法按视屏写的  执行没结果
下面是源程序

//
//  main.c
//  测试题5
//
//  Created by Mac on 15/10/20.
//  Copyright (c) 2015年 Mac. All rights reserved.
//

//编写一个学生管理系统程序,用来记录学生的信息(包括姓名、年龄、性别、学号、分数),提供增加、删除、查询学生信息的入口。
#include <stdio.h>
#include <string.h>
#define stuMax 100
void init();
void addStu();
void deleteStu();
void listStu();
int validateInput(int num,int min,int max);

//定义结构体
typedef  struct{

    char name[10];
    int age;
    char sex[4];
    int sid;
    double score;
     
}student;

//定义学生数组
student stu[stuMax];
//定义学生人数
int stuCount=0;
//记录操作编号
int fno;



int main(int argc, const char * argv[]) {
   
    init();
    while (1)
    {
        printf("\n");
        printf("系统初始化中......\n");
        printf("*******************\n");
        printf("   1.增加学生信息\n");
        printf("   2.删除学生信息\n");
        printf("   3.查询学生信息\n");
        printf("   4.退出系统按任意键\n");
        printf("*******************\n");
        printf("\n");
        // 提示用户输入
        printf("请输入你要操作的功能编号\n");
        
   
        scanf("%d",&fno);
        validateInput(fno, 1, 4);
        switch (fno)
        {
            case 1:
                addStu();
                break;
            case 2:
                deleteStu();
                break;
            case 3:
                listStu();
                break;
            case 4:
                printf("系统正在退出");
                printf("系统已退出");
                return 0;
                break;
            default:
                return 0;
                break;
        }
    }
}



//增加
void addStu(){
    printf("你选择的是增加学生\n");
   
    //获取用户输入,赋值给结构体中的相应属性
    printf("请输入要增加的学生姓名\n");
    scanf("%s",stu[stuCount].name);
   
    printf("请输入要增加的学生年龄:\n");
    scanf("%d",&stu[stuCount].age);
   
    printf("请输入要增加的学生性别:\n");
    scanf("%s",stu[stuCount].sex);
   
    printf("请输入要增加的学生学号:\n");
    scanf("%d",&stu[stuCount].sid);
   
    printf("请输入要增加的学生分数:\n");
    scanf("%lf",&stu[stuCount].score);
   
    stuCount++;

}
//删除
void deleteStu(){

    printf("你选择的是删除学生\n");
    int no;
    printf("请选择删除学生的编号\n");
    scanf("%d",&no);
    int result=validateInput(no, 1, stuCount);
    if (result!=0)
    {

        //如果删除的元素是最后一个
        if(no==stuCount)
        {
            stuCount--;
            printf("删除成功\n");
        }
        else
        {
            for (int i=no; no<stuCount; i++)
            {
                stu[no-1]=stu[no];
               
            }
            stuCount--;
            printf("删除成功....\n");
        }
        
    }
}
//查看
void listStu(){

    printf("你选择的是查看学生\n");
    if (stuCount==0)
    {
        printf("没有学生信息存在!\n");
        
    }else
    {
        printf("编号\t 姓名\t 年龄\t 性别\t 学号\t 分数\t \n");
        for(int i=0;i<stuCount;i++) {
            
            printf("%d\t %s\t %d\t %s\t %d\t %f\t \n",i+1,stu[i].name,stu[i].age,stu[i].sex,stu[i].sid,stu[i].score);
        }
    }

}

//判断输入是否非法
int validateInput(int num,int min,int max){

    if (num<min||num>max) {
        printf("非法的输入");
        return 0;
    }
    return 1;
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马