m0_74035815 2023-12-05 09:35 采纳率: 85.7%
浏览 24
已结题

报错问题,只有两个错误,如图片所示,i多次初始化


#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>
#define MAXSIZE 1000
typedef struct Student {
    wchar_t name[20];
    int num;
    wchar_t sex[10];
    wchar_t dianhua[20];
    wchar_t place[20];
} Student;
typedef struct {
    Student elem[MAXSIZE];
    int last;
} SeqList;
void InList(SeqList *L, int i) {
    int x;
    printf("请输入学生数量:");
    scanf("%d", &x);
    L->last = x;
    for (i = 1; i <= x; i++) {
        printf("第%d位学生信息\n", i);
        printf("———————————————\n");
        printf("姓名:");
        scanf("%ls", L->elem[i].name);
        printf("———————————————\n");
        printf("学号:");
        scanf("%d", &L->elem[i].num);
        printf("———————————————\n");
        printf("性别:");
        scanf("%ls", L->elem[i].sex);
        printf("———————————————\n");
        printf("电话:");
        scanf("%ls", L->elem[i].dianhua);
        printf("———————————————\n");
        printf("籍贯:");
        scanf("%ls", L->elem[i].place);
    }
    printf("\n");
}
void PrintList(SeqList *L, int i) {
    for (i = 1; i <= L->last; i++) {
        printf("姓名:%ls 学号:%d 性别:%ls 电话:%ls 籍贯:%ls\n", L->elem[i].name, L->elem[i].num, L->elem[i].sex, L->elem[i].dianhua, L->elem[i].place);
    }
}
void Find(SeqList *L) {
    int i = 1;
    int n;
    if (L->last < 1) {
        printf("没有该同学\n");
        return;
    }
    printf("输入要查找学生的学号\n");
    scanf("%d", &n);
    while (i <= L->last && L->elem[i].num != n) {
        i++;
    }
    if (i <= L->last) {
        printf("该学生姓名为:%ls 学号为:%d 性别为:%ls 电话为:%ls 籍贯为:%ls\n", L->elem[i].name, L->elem[i].num, L->elem[i].sex, L->elem[i].dianhua, L->elem[i].place);
        return;
    }
    if (i > L->last) {
        printf("学号错误,未查询到该学生\n");
        return;
    }
}
int Delete(SeqList *L, int i) {
    int j;
    int k;
    int error;
    printf("请输入要删除的学生学号:");
    scanf("%d", &i);
    if (L->last < 1) {
        printf("空表!");
        return error;
    }
    for (k = 1; k <= L->last; k++) {
        if (L->elem[k].num == i)
            break;
    }
    if (k > L->last) {
        printf("未找到该学生!\n");
        return error;
    } else {
        for (j = k; j <= L->last; j++)
            L->elem[j] = L->elem[j + 1];
        L->last--;
        return 1;
    }
}
int Insert(SeqList *L, int i, Student e) {
    int j;
    if (L->last == MAXSIZE) {
        printf("表满\n");
        return 0;
    }
    if (i < 1 || i > L->last + 2) {
        printf("位序不合法\n");
        return 0;
    }
    for (j = L->last; j >= i - 1; j--)
        L->elem[j + 1] = L->elem[j];
    L->elem[i] = e;
    L->last++;
    return 1;
}
void CountAllPlaces(SeqList *L) {
    wchar_t places[MAXSIZE][20];
    int count[MAXSIZE] = {0};
    int uniqueCount = 0;
    for (int i = 1; i <= L->last; i++) {
        int found = 0;
        for (int j = 0; j < uniqueCount; j++) {
            if (wcscmp(L->elem[i].place, places[j]) == 0) {
                count[j]++;
                found = 1;
                break;
            }
        }
        if (!found) {
            wcscpy(places[uniqueCount], L->elem[i].place);
            count[uniqueCount]++;
            uniqueCount++;
        }
    }
    for (int i = 0; i < uniqueCount; i++) {
        printf("%ls  %d\n", places[i], count[i]);
    }
}
int main() {
    setlocale(LC_ALL, "");
    int N = 1, i, j;
    SeqList L;
    Student e, g, q;
    int renshu, a;
    printf("**********************\n");
    printf("*------选择操作------*\n");
    printf("*------1 登记--------*\n");
    printf("*------2 输出--------*\n");
    printf("*------3 查询--------*\n");
    printf("*------4 删除--------*\n");
    printf("*------5 插入--------*\n");
    printf("*------6 统计所有生源----*\n");
    printf("*------0 退出--------*\n");
    printf("**********************\n");
    while (N) {
        printf("请选择操作\n");
        scanf("%d", &N);
        if (N == 1) {
            InList(&L, i);
        } else if (N == 2) {
            PrintList(&L, i);
        } else if (N == 3) {
            Find(&L);
        } else if (N == 4) {
            if (Delete(&L, j)) {
                renshu--;
                printf("删除成功\n");
            } else {
                printf("删除失败\n");
            }
        } else if (N == 5) {
            printf("请输入要插入的位置:");
            scanf("%d", &a);
            printf("请输入学生姓名:");
            scanf("%ls", g.name);
            printf("请输入学生学号:");
            scanf("%d", &g.num);
            printf("请输入学生性别:");
            scanf("%ls", g.sex);
            printf("请输入学生电话:");
            scanf("%ls", g.dianhua);
            printf("请输入学生籍贯:");
            scanf("%ls", g.place);
            if (Insert(&L, a, g)) {
                renshu++;
                printf("插入成功\n");
            } else {
                printf("插入失败\n");
            }
        } else if (N == 6) {
            CountAllPlaces(&L);
        } else if (N == 0) {
            printf("退出成功,按任意键结束\n");
            exit(0);
        }
    }
    return 0;
}
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/104b4455347548f7a54bb014d13a3ef6.jpeg "#left")

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/fd61b5b1c55a47259cc1b0f92d2860d3.jpeg "#left")

  • 写回答

10条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-12-05 09:35
    关注

    img

    应该是这两个i冲突了吧,我这里是cfree和在线编辑的,源代码不会有这个问题。可以考虑改掉下面那个试试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(9条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月5日
  • 已采纳回答 12月5日
  • 创建了问题 12月5日