就别熬夜啦 2021-12-23 12:28 采纳率: 100%
浏览 57
已结题

在VScode可以正常运行的代码,为什么在VS2010上运行不了?

img

img

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 定义结构体存储学生信息
typedef struct student
{
    char ID[20];
    char Name[20];
    char Sex[4];
    int Math;
    int English;
    int C;
} Student;
// 单链表,一个节点存储一个学生信息
typedef struct node
{
    struct node *next;/* 指向下一个节点的地址 */
    Student data;/* 学生信息 */
} Node;
// 用于排序的单链表
typedef struct sorting
{
    Node *address;/* 学生信息节点的地址 */
    struct sorting *next;
} Sorting;
Node *init();/* 申请节点空间 */
void Menu(Node *head);/* 菜单 */
void Input(Node *head);/* 学生信息输入 */
void Input_ID(char *str);/* 学生ID输入,必须为纯数字,不能为空*/
void Input_Other(char *str);/* 其他信息输入,不能为为空 */
void Input_Sex(char *str);/* 性别输入,限制为男或女 */
int Input_Score();/* 成绩输入,0~100之间,不能为空 */
void Output(Node *head);/* 输出所有学生信息 */
void Output_By_Name(Node *head);/* 根据学生姓名输出 */
void Output_By_ID(Node *head);/* 根据学号输出 */
void Output_By_C(Node *head);/* 根据C语言从高到低输出 */
int main()
{
    // 申请链表头结点地址,并初始化
    Node *head = init();
    head->next = NULL;
    // 循环输出菜单
    while (1)
    {
        // 清屏
        system("CLS");
        Menu(head);
        // 按任意键下一步
        system("PAUSE");
    }
    return 0;
}

Node *init()
{
    Node *head;
    // 分配空间
    head = (Node *)malloc(sizeof(Node));
    // 判断是否成功
    if (head == NULL)
    {
        printf("申请内存空间失败!");
        exit(0);
    }
    // 返回地址
    return head;
}
void Menu(Node *head)
{
    printf("欢迎使用学生成绩管理系统\n");
    printf("1.增加学生信息           2.显示学生信息            3.从高到低显示C语言成绩       4.按学号查找\n");
    printf("5.按姓名查找             0.退出系统\n");
    printf("请输入你的选择:");
    // 获取输入选项
    int c;
    fflush(stdin);
    scanf("%d", &c);
    switch (c)
    {
    case 1:
        Input(head);
        break;
    case 2:
        Output(head);
        break;
    case 3:
        Output_By_C(head);
        break;
    case 4:
        Output_By_ID(head);
        break;
    case 5:
        Output_By_Name(head);
        break;
    default:
        printf("输入信息有误,请重新输入!\n");
        break;
    }
}
void Input(Node *head)
{
    int N;
    printf("\n请输入要录入的学生数量:");
    scanf("%d", &N);
    for (int i = 0; i < N; i++)
    {
        printf("\n现在添加第 %d 个学生数据!\n\n", i + 1);
        //申请一个节点
        Node *p = init();
        p->next = NULL;
        // 填充信息
        printf("\n学号:");
        Input_ID(p->data.ID);
        printf("\n姓名:");
        Input_Other(p->data.Name);
        printf("\n性别:");
        Input_Sex(p->data.Sex);
        printf("\n数学成绩:");
        p->data.Math = Input_Score();
        printf("\n英语成绩:");
        p->data.English = Input_Score();
        printf("\nC语言成绩:");
        p->data.C = Input_Score();
        Node *a = head;
        // 使a指向最后一个节点
        while (a->next != NULL)
        {
            a = a->next;
        }
        // 将节点挂到链表最后
        a->next = p;
        printf("\n添加成功!\n\n");
    }
}
void Input_ID(char *str)
{
    fflush(stdin);
    gets(str);
    // 判断输入是否为纯数字
    if (strspn(str, "0123456789") == strlen(str))
    {
        // 判断是否为空
        if (strlen(str) == 0)
        {
            printf("\n学号不能为空,请重新输入:");
            Input_ID(str);
        }
    }
    else
    {
        printf("\n学号为纯数字,请重新输入:");
        Input_ID(str);
    }
}
void Input_Other(char *str)
{
    fflush(stdin);
    gets(str);
    if (strlen(str) == 0)
    {
        printf("不能为空,请重新输入:");
        Input_Other(str);
    }
    int i = 0, x = 0;
    // 判断是否全部为为空格
    while (str[i] != '\0')
    {
        if (str[i] == ' ')
            x++;
        i++;
    }
    if (i == x)
    {
        printf("不能全为空格,请重新输入:");
        Input_Other(str);
    }
}
void Input_Sex(char *str)
{
    fflush(stdin);
    gets(str);
    if (strlen(str) == 0)
    {
        printf("不能为空,请重新输入:");
        Input_Sex(str);
    }
    else if ((strcmp(str, "男") == 0) || (strcmp(str, "女") == 0))
    {
        return;
    }
    else
    {
        printf("内容不合规(男或女),请重新输入:");
        Input_Sex(str);
    }
}
int Input_Score()
{
    fflush(stdin);
    int a;
    scanf("%d", &a);
    if (a < 0 || a > 100)
    {
        printf("成绩取值范围在0~100之间!请重新输入:");
        a = Input_Score();
    }
    return a;
}
void Output(Node *head)
{
    Node *a;
    a = head;
    if (a->next == NULL)
    {
        printf("\n当前没有职工信息数据!\n\n");
        return;
    }
    int math_H = 0, math_L = 101, math_sum = 0;
    int english_H = 0, english_L = 101, english_sum = 0;
    int c_H = 0, c_L = 101, c_sum = 0;
    int i = 0;
    printf("\n%-10s %-10s %-10s %-15s %-15s %-15s\n", "学号", "姓名", "性别", "数学成绩", "英语成绩", "C语言成绩");
    while (a->next != NULL)
    {
        // 获取最高分
        if (math_H < a->next->data.Math)
            math_H = a->next->data.Math;
            // 获取最低分
        if (math_L > a->next->data.Math)
            math_L = a->next->data.Math;
            // 获取分数总和
        math_sum += a->next->data.Math;
        
        if (english_H < a->next->data.English)
            english_H = a->next->data.English;
        if (english_L > a->next->data.English)
            english_L = a->next->data.English;
        english_sum += a->next->data.English;

        if (c_H < a->next->data.C)
            c_H = a->next->data.C;
        if (c_L > a->next->data.C)
            c_L = a->next->data.C;
        c_sum += a->next->data.C;
        // 输出学生信息
        printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", a->next->data.ID, a->next->data.Name, a->next->data.Sex, a->next->data.Math, a->next->data.English, a->next->data.C);
        a = a->next;
        i++;
    }
    // 输出最高分,最低分,平均分
    printf("\n%-10s %-10s %-10s %-15d %-15d %-15d\n", "", "最高分是", "", math_H, english_H, c_H);
    printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", "", "最低分是", "", math_L, english_L, c_L);
    printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", "", "平均成绩是", "", math_sum / i, english_sum / i, c_sum / i);
    printf("\n");
}
void Output_By_C(Node *head)
{
    if (head->next == NULL)
    {
        printf("\n信息为空,请输入信息后再进行此操作\n");
        return;
    }

    Node *a = head->next;
    // 初始化,并将第一个节点添加到排序链表
    Sorting *h = (Sorting *)malloc(sizeof(Sorting));
    Sorting *h1 = (Sorting *)malloc(sizeof(Sorting));
    h->next = h1;
    h1->address = a;
    h1->next = NULL;
    // 循环学生信息链表
    while (a->next != NULL)
    {
        Node *x;
        x = a->next;
        // 判断C语言成绩是否小于等于当前节点,如果小于,则继续比较下一个节点,如果大于当前节点则退出
        Sorting *b = h;
        while (x->data.C <= b->next->address->data.C)
        {
            if (b->next->next == NULL)
            {
                break;
            }
            b = b->next;
        }
        // 创建一个新的节点,然后插入
        Sorting *h2 = (Sorting *)malloc(sizeof(Sorting));
        h2->address = x;
        if (x->data.C <= b->next->address->data.C)
        {
            h2->next = b->next->next;
            b->next->next = h2;
        }
        else
        {
            h2->next = b->next;
            b->next = h2;
        }
        a = a->next;
    }
    printf("\n%-10s %-10s %-10s %-15s %-15s %-15s\n", "学号", "姓名", "性别", "数学成绩", "英语成绩", "C语言成绩");
    while (h->next != NULL)
    {
        printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", h->next->address->data.ID, h->next->address->data.Name, h->next->address->data.Sex, h->next->address->data.Math, h->next->address->data.English, h->next->address->data.C);
        h = h->next;
    }
}
void Output_By_ID(Node *head)
{
    if (head->next == NULL)
    {
        printf("\n信息为空,请输入信息后再进行此操作\n");
        return;
    }
    printf("\n请输入需要查询的学号:\n");
    char str[20];
    Input_Other(str);
    Node *a;
    a = head;
    int i = 0;
    while (a->next != NULL)
    {
        if (strcmp(str, a->next->data.ID) == 0)
        {
            if (i == 0)
            {
                printf("\n%-10s %-10s %-10s %-15s %-15s %-15s\n", "学号", "姓名", "性别", "数学成绩", "英语成绩", "C语言成绩");
            }
            i++;
            printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", a->next->data.ID, a->next->data.Name, a->next->data.Sex, a->next->data.Math, a->next->data.English, a->next->data.C);
        }
        a = a->next;
    }
    
    if (i == 0)
    {
        printf("没有学号为 %s 的学生,请核对后再输入!!\n", str);
    }
}
void Output_By_Name(Node *head)
{
    if (head->next == NULL)
    {
        printf("\n信息为空,请输入信息后再进行此操作\n");
        return;
    }
    printf("\n请输入需要查询的姓名:\n");
    char str[20];
    Input_Other(str);
    Node *a;
    a = head;
    int i = 0;
    while (a->next != NULL)
    {
        if (strcmp(str, a->next->data.Name) == 0)
        {
            if (i == 0)
            {
                printf("\n%-10s %-10s %-10s %-15s %-15s %-15s\n", "学号", "姓名", "性别", "数学成绩", "英语成绩", "C语言成绩");
            }
            i++;
            printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", a->next->data.ID, a->next->data.Name, a->next->data.Sex, a->next->data.Math, a->next->data.English, a->next->data.C);
        }
        a = a->next;
    }
    if (i == 0)
    {
        printf("没有姓名为 %s 的学生,请核对后再输入!!\n", str);
    }
}
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-12-23 14:33
    关注

    没什么错误,几个输入函数里 gets()做了修改,供参考:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    // 定义结构体存储学生信息
    typedef struct student
    {
        char ID[20];
        char Name[20];
        char Sex[4];
        int  Math;
        int  English;
        int  C;
    } Student;
    // 单链表,一个节点存储一个学生信息
    typedef struct node
    {
        struct node* next;/* 指向下一个节点的地址 */
        Student data;/* 学生信息 */
    } Node;
    // 用于排序的单链表
    typedef struct sorting
    {
        Node* address;/* 学生信息节点的地址 */
        struct sorting* next;
    } Sorting;
    Node* init();/* 申请节点空间 */
    void Menu(Node* head);/* 菜单 */
    void Input(Node* head);/* 学生信息输入 */
    void Input_ID(char* str);/* 学生ID输入,必须为纯数字,不能为空*/
    void Input_Other(char* str);/* 其他信息输入,不能为为空 */
    void Input_Sex(char* str);/* 性别输入,限制为男或女 */
    int  Input_Score();/* 成绩输入,0~100之间,不能为空 */
    void Output(Node* head);/* 输出所有学生信息 */
    void Output_By_Name(Node* head);/* 根据学生姓名输出 */
    void Output_By_ID(Node* head);/* 根据学号输出 */
    void Output_By_C(Node* head);/* 根据C语言从高到低输出 */
    int main()
    {
        // 申请链表头结点地址,并初始化
        Node* head = init();
        head->next = NULL;
        // 循环输出菜单
        while (1)
        {
            // 清屏
            system("CLS");
            Menu(head);
            // 按任意键下一步
            system("PAUSE");
        }
        return 0;
    }
    Node* init()
    {
        Node* head;
        // 分配空间
        head = (Node*)malloc(sizeof(Node));
        // 判断是否成功
        if (head == NULL)
        {
            printf("申请内存空间失败!");
            exit(0);
        }
        // 返回地址
        return head;
    }
    void Menu(Node* head)
    {
        printf("欢迎使用学生成绩管理系统\n");
        printf("1.增加学生信息           2.显示学生信息            3.从高到低显示C语言成绩       4.按学号查找\n");
        printf("5.按姓名查找             0.退出系统\n");
        printf("请输入你的选择:");
        // 获取输入选项
        int c;
        fflush(stdin);
        scanf("%d", &c);
        switch (c)
        {
        case 1:
            Input(head);
            break;
        case 2:
            Output(head);
            break;
        case 3:
            Output_By_C(head);
            break;
        case 4:
            Output_By_ID(head);
            break;
        case 5:
            Output_By_Name(head);
            break;
        default:
            printf("输入信息有误,请重新输入!\n");
            break;
        }
    }
    void Input(Node* head)
    {
        int N;
        printf("\n请输入要录入的学生数量:");
        scanf("%d", &N);
        for (int i = 0; i < N; i++)
        {
            printf("\n现在添加第 %d 个学生数据!\n\n", i + 1);
            //申请一个节点
            Node* p = init();
            p->next = NULL;
            // 填充信息
            printf("\n学号:");
            Input_ID(p->data.ID);
            printf("\n姓名:");
            Input_Other(p->data.Name);
            printf("\n性别:");
            Input_Sex(p->data.Sex);
            printf("\n数学成绩:");
            p->data.Math = Input_Score();
            printf("\n英语成绩:");
            p->data.English = Input_Score();
            printf("\nC语言成绩:");
            p->data.C = Input_Score();
            Node* a = head;
            // 使a指向最后一个节点
            while (a->next != NULL)
            {
                a = a->next;
            }
            // 将节点挂到链表最后
            a->next = p;
            printf("\n添加成功!\n\n");
        }
    }
    void Input_ID(char* str)
    {
        fflush(stdout); rewind(stdin);//fflush(stdin);
        gets_s(str,20); //gets(str);
        // 判断输入是否为纯数字
        if (strspn(str, "0123456789") == strlen(str))
        {
            // 判断是否为空
            if (strlen(str) == 0)
            {
                printf("\n学号不能为空,请重新输入:");
                Input_ID(str);
            }
        }
        else
        {
            printf("\n学号为纯数字,请重新输入:");
            Input_ID(str);
        }
    }
    void Input_Other(char* str)
    {
        fflush(stdout); rewind(stdin);//fflush(stdin);
        gets_s(str,20);   //gets(str);
        if (strlen(str) == 0)
        {
            printf("不能为空,请重新输入:");
            Input_Other(str);
        }
        int i = 0, x = 0;
        // 判断是否全部为为空格
        while (str[i] != '\0')
        {
            if (str[i] == ' ')
                x++;
            i++;
        }
        if (i == x)
        {
            printf("不能全为空格,请重新输入:");
            Input_Other(str);
        }
    }
    void Input_Sex(char* str)
    {
        fflush(stdout); rewind(stdin);//fflush(stdin);
        gets_s(str,4);    //gets(str);
        if (strlen(str) == 0)
        {
            printf("不能为空,请重新输入:");
            Input_Sex(str);
        }
        else if ((strcmp(str, "男") == 0) || (strcmp(str, "女") == 0))
        {
            return;
        }
        else
        {
            printf("内容不合规(男或女),请重新输入:");
            Input_Sex(str);
        }
    }
    int Input_Score()
    {
        fflush(stdout); rewind(stdin);//  fflush(stdin);
        int a;
        scanf("%d", &a);
        if (a < 0 || a > 100)
        {
            printf("成绩取值范围在0~100之间!请重新输入:");
            a = Input_Score();
        }
        return a;
    }
    void Output(Node* head)
    {
        Node* a;
        a = head;
        if (a->next == NULL)
        {
            printf("\n当前没有职工信息数据!\n\n");
            return;
        }
        int math_H = 0, math_L = 101, math_sum = 0;
        int english_H = 0, english_L = 101, english_sum = 0;
        int c_H = 0, c_L = 101, c_sum = 0;
        int i = 0;
        printf("\n%-10s %-10s %-10s %-15s %-15s %-15s\n", "学号", "姓名", "性别", "数学成绩", "英语成绩", "C语言成绩");
        while (a->next != NULL)
        {
            // 获取最高分
            if (math_H < a->next->data.Math)
                math_H = a->next->data.Math;
            // 获取最低分
            if (math_L > a->next->data.Math)
                math_L = a->next->data.Math;
            // 获取分数总和
            math_sum += a->next->data.Math;
            if (english_H < a->next->data.English)
                english_H = a->next->data.English;
            if (english_L > a->next->data.English)
                english_L = a->next->data.English;
            english_sum += a->next->data.English;
            if (c_H < a->next->data.C)
                c_H = a->next->data.C;
            if (c_L > a->next->data.C)
                c_L = a->next->data.C;
            c_sum += a->next->data.C;
            // 输出学生信息
            printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", a->next->data.ID, a->next->data.Name, a->next->data.Sex, a->next->data.Math, a->next->data.English, a->next->data.C);
            a = a->next;
            i++;
        }
        // 输出最高分,最低分,平均分
        printf("\n%-10s %-10s %-10s %-15d %-15d %-15d\n", "", "最高分是", "", math_H, english_H, c_H);
        printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", "", "最低分是", "", math_L, english_L, c_L);
        printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", "", "平均成绩是", "", math_sum / i, english_sum / i, c_sum / i);
        printf("\n");
    }
    void Output_By_C(Node* head)
    {
        if (head->next == NULL)
        {
            printf("\n信息为空,请输入信息后再进行此操作\n");
            return;
        }
        Node* a = head->next;
        // 初始化,并将第一个节点添加到排序链表
        Sorting* h = (Sorting*)malloc(sizeof(Sorting));
        Sorting* h1 = (Sorting*)malloc(sizeof(Sorting));
        h->next = h1;
        h1->address = a;
        h1->next = NULL;
        // 循环学生信息链表
        while (a->next != NULL)
        {
            Node* x;
            x = a->next;
            // 判断C语言成绩是否小于等于当前节点,如果小于,则继续比较下一个节点,如果大于当前节点则退出
            Sorting* b = h;
            while (x->data.C <= b->next->address->data.C)
            {
                if (b->next->next == NULL)
                {
                    break;
                }
                b = b->next;
            }
            // 创建一个新的节点,然后插入
            Sorting* h2 = (Sorting*)malloc(sizeof(Sorting));
            h2->address = x;
            if (x->data.C <= b->next->address->data.C)
            {
                h2->next = b->next->next;
                b->next->next = h2;
            }
            else
            {
                h2->next = b->next;
                b->next = h2;
            }
            a = a->next;
        }
        printf("\n%-10s %-10s %-10s %-15s %-15s %-15s\n", "学号", "姓名", "性别", "数学成绩", "英语成绩", "C语言成绩");
        while (h->next != NULL)
        {
            printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", h->next->address->data.ID, h->next->address->data.Name, h->next->address->data.Sex, h->next->address->data.Math, h->next->address->data.English, h->next->address->data.C);
            h = h->next;
        }
    }
    void Output_By_ID(Node* head)
    {
        if (head->next == NULL)
        {
            printf("\n信息为空,请输入信息后再进行此操作\n");
            return;
        }
        printf("\n请输入需要查询的学号:\n");
        char str[20];
        Input_Other(str);
        Node* a;
        a = head;
        int i = 0;
        while (a->next != NULL)
        {
            if (strcmp(str, a->next->data.ID) == 0)
            {
                if (i == 0)
                {
                    printf("\n%-10s %-10s %-10s %-15s %-15s %-15s\n", "学号", "姓名", "性别", "数学成绩", "英语成绩", "C语言成绩");
                }
                i++;
                printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", a->next->data.ID, a->next->data.Name, a->next->data.Sex, a->next->data.Math, a->next->data.English, a->next->data.C);
            }
            a = a->next;
        }
        if (i == 0)
        {
            printf("没有学号为 %s 的学生,请核对后再输入!!\n", str);
        }
    }
    void Output_By_Name(Node* head)
    {
        if (head->next == NULL)
        {
            printf("\n信息为空,请输入信息后再进行此操作\n");
            return;
        }
        printf("\n请输入需要查询的姓名:\n");
        char str[20];
        Input_Other(str);
        Node* a;
        a = head;
        int i = 0;
        while (a->next != NULL)
        {
            if (strcmp(str, a->next->data.Name) == 0)
            {
                if (i == 0)
                {
                    printf("\n%-10s %-10s %-10s %-15s %-15s %-15s\n", "学号", "姓名", "性别", "数学成绩", "英语成绩", "C语言成绩");
                }
                i++;
                printf("%-10s %-10s %-10s %-15d %-15d %-15d\n", a->next->data.ID, a->next->data.Name, a->next->data.Sex, a->next->data.Math, a->next->data.English, a->next->data.C);
            }
            a = a->next;
        }
        if (i == 0)
        {
            printf("没有姓名为 %s 的学生,请核对后再输入!!\n", str);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 修改了问题 12月23日
  • 修改了问题 12月23日
  • 展开全部

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度