鱼C论坛

 找回密码
 立即注册
查看: 2921|回复: 7

[已解决]为啥VC6.0可以,Visual Studio 2019就报错呢?

[复制链接]
发表于 2019-8-6 11:22:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*
要求:1.设计一个程序,用链表储存学生信息,并以成绩进行排序输出;
      2.学生信息用结构体进行封装;
*/

#include<stdio.h>
#include<stdlib.h>

struct STUDENT//学生信息结构体
{
        char name[20];
        int age;
        float score;
        char num[20];
};

struct NODE
{
        struct STUDENT data;//使用结构体封装
        struct NODE* next;
};

struct NODE* CreateLink(void);//创建链表函数声明
void lnitLink(struct NODE *);//链表结点信息输入函数声明
void BubbleSort(struct NODE *);//链表结点排序函数声明
void OutputLink(struct NODE *);//链表结点信息输出函数声明

int main(void)
{
        struct NODE * head =CreateLink();//创建链表
        lnitLink(head);//链表初始化
        BubbleSort(head);//冒泡排序
        printf("\n*************************排序后的结果如下:******************************\n\n");
        OutputLink(head);//排序结果输出
        return 0;
}

//****************以下为创建链表函数***********************************
struct NODE* CreateLink(void)
{
        int i = 0;
        int cnt = 0;
        struct NODE * head = malloc(sizeof * head);
        struct NODE * move = head;
        move->next = NULL;
        printf("请输入学生的数量:");
        scanf("%d",&cnt);
        getchar();

        for (i = 0; i < cnt; ++i)
        {
                struct NODE* fresh = malloc(sizeof * fresh);
                move->next = fresh;
                fresh->next = NULL;
                move = fresh;
        }
        return head;
}

//****************以下为链表信息输入函数***********************************
void lnitLink(struct NODE *head)
{
        int i = 1;
        struct NODE* move = head->next;
        while (NULL != move)
        {
                printf("\n请输入第%d个学生的姓名、年龄、成绩、学号:\n\n", i);
                scanf("%s%d%f%s",move->data.name,&move->data.age,&move->data.score,move->data.num);
                getchar();
                move = move->next;
                ++i;
        }
        return;
}

//******************以下为冒泡排序函数************************************************
void BubbleSort(struct NODE* head)
{
        struct NODE* move = head->next;
        struct NODE* turn = head->next;
        struct STUDENT buf;
        if (NULL == move)
        {
                printf("链表为空\n");
                exit(0);//退出程序
        }
        while (NULL != turn->next)
        {
                while (NULL != move->next)
                {
                        if (move->data.score < move->next->data.score)
                        {
                                buf = move->data;
                                move->data = move->next->data;
                                move->next->data =buf;
                        }
                        move = move->next;
                }
                move = head->next;
                turn = turn->next;
        }
        return;
}


//*******************以下为链表输出函数***************************************

void OutputLink(struct NODE* head)
{
        struct NODE* move = head->next;//初始化为首结点
        while (NULL != move)
        {
                printf("[姓名:%s 年龄:%d 成绩:%.1f 学号:%s]\n\n",move->data.name,move->data.age,move->data.score,move->data.num);
                move = move->next;
        }
        return;
}

这段代码在VC6.0里运行正常,Visual Studio 2019就报错。这是为什么呢?


                               
登录/注册后可看大图
最佳答案
2019-8-6 13:10:10
本帖最后由 Neverturnback 于 2019-8-6 13:13 编辑

创建项目的时候把安全检测关掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-6 12:02:35 | 显示全部楼层
本帖最后由 chxchxkkk 于 2019-8-6 12:06 编辑

语句格式不一样吧。
printf是c的格式,
c++ 是 cout << xxx   << endl; 这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 12:32:42 | 显示全部楼层
编译器不一样肯定会这样的  不过如果你用的语法符合C标准的化  ,vs2019能编译通过   简单设置一下就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 13:10:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Neverturnback 于 2019-8-6 13:13 编辑

创建项目的时候把安全检测关掉
安全检查.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 13:22:53 | 显示全部楼层
本帖最后由 Neverturnback 于 2019-8-6 13:24 编辑
/*
要求:1.设计一个程序,用链表储存学生信息,并以成绩进行排序输出;
2.学生信息用结构体进行封装;
*/

#include<stdio.h>
#include<stdlib.h>

struct STUDENT//学生信息结构体
{
        char name[20];
        int age;
        float score;
        char num[20];
};

struct NODE
{
        struct STUDENT data;//使用结构体封装
        struct NODE* next;
};

struct NODE* CreateLink(void);//创建链表函数声明
void lnitLink(struct NODE *);//链表结点信息输入函数声明
void BubbleSort(struct NODE *);//链表结点排序函数声明
void OutputLink(struct NODE *);//链表结点信息输出函数声明

int main(void)
{
        struct NODE * head = CreateLink();//创建链表
        lnitLink(head);//链表初始化
        BubbleSort(head);//冒泡排序
        printf("\n*************************排序后的结果如下:******************************\n\n");
        OutputLink(head);//排序结果输出
        return 0;
}

//****************以下为创建链表函数***********************************
struct NODE* CreateLink(void)
{
        int i = 0;
        int cnt = 0;
        struct NODE * head = (struct NODE *)malloc(sizeof(struct NODE));
        struct NODE * move = head;
        move->next = NULL;
        printf("请输入学生的数量:");
        scanf("%d", &cnt);
        getchar();

        for (i = 0; i < cnt; ++i)
        {
                struct NODE* fresh = (struct NODE *)malloc(sizeof(struct NODE));
                move->next = fresh;
                fresh->next = NULL;
                move = fresh;
        }
        return head;
}

//****************以下为链表信息输入函数***********************************
void lnitLink(struct NODE *head)
{
        int i = 1;
        struct NODE* move = head->next;
        while (NULL != move)
        {
                printf("\n请输入第%d个学生的姓名、年龄、成绩、学号:\n\n", i);
                scanf("%s%d%f%s", move->data.name, &move->data.age, &move->data.score, move->data.num);
                getchar();
                move = move->next;
                ++i;
        }
        return;
}

//******************以下为冒泡排序函数************************************************
void BubbleSort(struct NODE* head)
{
        struct NODE* move = head->next;
        struct NODE* turn = head->next;
        struct STUDENT buf;
        if (NULL == move)
        {
                printf("链表为空\n");
                exit(0);//退出程序
        }
        while (NULL != turn->next)
        {
                while (NULL != move->next)
                {
                        if (move->data.score < move->next->data.score)
                        {
                                buf = move->data;
                                move->data = move->next->data;
                                move->next->data = buf;
                        }
                        move = move->next;
                }
                move = head->next;
                turn = turn->next;
        }
        return;
}


//*******************以下为链表输出函数***************************************

void OutputLink(struct NODE* head)
{
        struct NODE* move = head->next;//初始化为首结点
        while (NULL != move)
        {
                printf("[姓名:%s 年龄:%d 成绩:%.1f 学号:%s]\n\n", move->data.name, move->data.age, move->data.score, move->data.num);
                move = move->next;
        }

        getchar();
        getchar();
        return;
}

你所有的malloc的部分都出错了,帮你修改过了,还有malloc分配的空间最后记得free释放,释放我没帮你写,你自己加把
运行结果.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-8-6 21:08:59 | 显示全部楼层
路过……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-8 14:46:48 | 显示全部楼层
Neverturnback 发表于 2019-8-6 13:10
创建项目的时候把安全检测关掉

2019版本创建项目时没有这个选项,在创建后项目属性里修改的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-10 07:43:17 | 显示全部楼层
Neverturnback 发表于 2019-8-6 13:22
你所有的malloc的部分都出错了,帮你修改过了,还有malloc分配的空间最后记得free释放,释放我没帮你写 ...

请问,如何释放这段代码中malloc申请的空间?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 03:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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