首页 新闻 会员 周边 捐助

关于c语言的一些问题

0
悬赏园豆:30 [待解决问题]
复制代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 60
typedef struct Student {
int number;
char name[MAX_SIZE];
char sex[MAX_SIZE];
//出生年月日
int birth_Year;
int birth_Month;
char education[MAX_SIZE];
char address[MAX_SIZE];
struct Student* next;
}LinkList;
int number;
char name[MAX_SIZE];
char sex[MAX_SIZE];
//出生年月日
int birth_Year;
int birth_Month;
char education[MAX_SIZE];
char address[MAX_SIZE];
void Add(LinkList *L);
void Find(LinkList *L);
int main(void) {
int flag = 1;
while (flag) {
int number;
LinkList L;
printf("*****欢迎使用学生管理系统*****\n");
printf("*****1.添加学生信息*****\n");
printf("*****2.查询学生信息*****\n");
printf("*****3.修改学生信息*****\n");
printf("*****4.对学生信息按编号排序*****\n");
printf("*****6.关闭系统*****\n");
printf("请输入所需操作:");
scanf("%d", &number);
switch (number) {
case 1:
printf("*****添加学生信息*****\n");
Add(&L);
break;
case 2:
printf("*****查询学生信息*****\n");
Find(&L);
break;
case 3:
printf("*****修改学生信息*****\n");
break;
case 4:
printf("*****删除学生信息*****\n");
break;
case 5:
printf("*****对学生信息按编号排序*****");
break;
case 6:
printf("*****关闭系统*****");
flag = 0;
break;
}
}
return 0;
}
void Add(LinkList *L) {
L = (LinkList*)malloc(sizeof(LinkList));
L->next = NULL;
LinkList* p = NULL;
p = L;
LinkList* data;
int flag = 1;
printf("请输入所需录入学生的人数:");
scanf("%d",&flag);
for (int i = 0; i < flag; i++) {
data = (LinkList*)malloc(sizeof(LinkList));
printf("请输入学生编号:");
scanf("%d", &number);
p->number = number;
printf("请输入学生姓名:");
scanf("%s", &name);
strcpy(p->name, name);
printf("请输入学生性别:");
scanf("%s", &sex);
strcpy(p->sex, sex);
printf("请输入学生出生年份:");
scanf("%d", &birth_Year);
p->birth_Year = birth_Year;
printf("请输入学生出生月份:");
scanf("%d", &birth_Month);
p->birth_Month = birth_Month;
printf("请输入学生学历:");
scanf("%s", &education);
strcpy(p->education, education);
printf("请输入学生住址:");
scanf("%s", &address);
strcpy(p->address, address);
p->next = data;
p = data;
}
p->next = NULL;
printf("添加成功");
printf("\n");
}
void Find(LinkList *L) {
LinkList* p;
p = L->next;
while (p != NULL) {
printf("学生姓名:%s\n",p->name);
printf("学生性别:%s\n", p->sex);
printf("学生年,月:%d %d\n", p->birth_Year, p->birth_Month);
printf("学生学历:%s\n", p->education);
printf("学生住址:%s\n", p->address);
printf("\n");
p = p->next;
}
}

新手小白。的主页 新手小白。 | 初学一级 | 园豆:75
提问于:2021-12-08 18:34
< >
分享
所有回答(1)
0
#include <iostream>
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 20
#define true 1
#define false 0
typedef struct student {
	int number;
	char name[MAX_SIZE];
	char sex[MAX_SIZE];
	//出生年月日    
	int birth_Year;
	int birth_Month;
	char education[MAX_SIZE];
	int phone;
	char address[MAX_SIZE];
}Student;
typedef struct Link {
	Student message;
	struct Link* next;
}LinkList;
LinkList* Add(LinkList* L);
int Find(LinkList* L);
int main(void) {
	int flag = 1;
	while (flag) {
		int number;
		LinkList* L = NULL;
		printf("*****欢迎使用学生管理系统*****\n");
		printf("*****1.添加学生信息*****\n");
		printf("*****2.查询学生信息*****\n");
		printf("*****3.修改学生信息*****\n");
		printf("*****4.对学生信息按编号排序*****\n");
		printf("*****6.关闭系统*****\n");
		printf("请输入所需操作:");
		scanf_s("%d", &number);
		switch (number) {
		case 1:
			printf("*****添加学生信息*****\n");
			L = Add(L);
			break;
		case 2:
			printf("*****查询学生信息*****\n");
			Find(L);
			break;
		case 3:
			printf("*****修改学生信息*****\n");
			break;
		case 4:
			printf("*****删除学生信息*****\n");
			break;
		case 5:
			printf("*****对学生信息按编号排序*****");
			break;
		case 6:
			printf("*****关闭系统*****");
			flag = 0;
			break;
		}
	}
	return 0;
}
//添加学生信息
LinkList* Add(LinkList* L) {
	LinkList* p;
	int flag = 1;
	L = (LinkList*)malloc(sizeof(LinkList));
	p = L;
	LinkList* data;
	while (flag) {
		data = (LinkList*)malloc(sizeof(LinkList));
		printf("请输入学生编号:");
		if (p != NULL) {
			scanf_s("%d", &p->message.number);
			printf("请输入学生姓名:");
			int  b = getchar();
			gets_s(p->message.name);
			printf("请输入学生性别:");
			b = scanf("%s", &p->message.sex);
			printf("请输入学生出生年份:");
			b = scanf("%d", &p->message.birth_Year);
			printf("请输入学生出生月份:");
			b = scanf("%d", &p->message.birth_Month);
			printf("请输入学生学历:");
			b = scanf("%s", &p->message.education);
			printf("请输入学生电话:");
			b = scanf("%d", &p->message.phone);
			printf("请输入学生住址:");
			b = scanf("%s", p->message.address);
			if (data != NULL) {
				data -> next = p -> next;
				p->next = data;
			}
		}
		printf("请输入是否继续:");
		scanf_s("%d", &flag);
	}
	return L;
}
//查询学生成绩
int Find(LinkList* L) {
	int i;
	LinkList* p;
	p = L;
	printf("请输入所查找的编号:");
	scanf_s("%d", &i);
	while (p->next != NULL && i != p->message.number) {
		p = p->next;
	}
	if (i == p->message.number) {
		printf("学生姓名:%s\n", p->message.name);
		printf("学生性别:%s\n", p->message.sex);
		printf("学生年,月:%d %d\n", p->message.birth_Year, p->message.birth_Month);
		printf("学生学历:%s\n", p->message.education);
		printf("学生电话:%d\n", p->message.phone);
		printf("学生住址:%s\n", p->message.address);
		printf("\n");
	}
	else {
		printf("未找到该学号\n");
	}
	return 1;
}
中华鲟3670 | 园豆:922 (小虾三级) | 2021-12-08 20:17
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 60
#define true 1
#define false 0
typedef struct student {
    int number;
    char name[MAX_SIZE];
    char sex[MAX_SIZE];
    //出生年月日    
    int birth_Year;
    int birth_Month;
    char education[MAX_SIZE];
    int phone;
    char address[MAX_SIZE];
}Student;
typedef struct Link{
    Student message;
    struct Link* next;
}LinkList;
LinkList* Add(LinkList* L);
int Find(LinkList* L);
int main(void) {
    int flag = 1;
    while (flag) {
        int number;
        LinkList L;
        printf("*****欢迎使用学生管理系统*****\n");
        printf("*****1.添加学生信息*****\n");
        printf("*****2.查询学生信息*****\n");
        printf("*****3.修改学生信息*****\n");
        printf("*****4.对学生信息按编号排序*****\n");
        printf("*****6.关闭系统*****\n");
        printf("请输入所需操作:");
        scanf("%d", &number);
        switch (number) {
        case 1:
            printf("*****添加学生信息*****\n");
            Add(&L);
            break;
        case 2:
            printf("*****查询学生信息*****\n");
            Find(&L);
            break;
        case 3:
            printf("*****修改学生信息*****\n");
            break;
        case 4:
            printf("*****删除学生信息*****\n");
            break;
        case 5:
            printf("*****对学生信息按编号排序*****");
            break;
        case 6:
            printf("*****关闭系统*****");
            flag = 0;
            break;
        }
    }
    return 0;
}
//添加学生信息
LinkList* Add(LinkList* L) {
        LinkList* p;
        int flag = 1;
        L = (LinkList*)malloc(sizeof(LinkList));
        p = L;
        LinkList* data;
        while (flag) {
            data = (LinkList*)malloc(sizeof(LinkList));
            printf("请输入学生编号:");
            scanf("%d", &p->message.number);
            printf("请输入学生姓名:");
            getchar();
            gets_s(p->message.name);
            printf("请输入学生性别:");
            scanf("%s", &p->message.sex);
            printf("请输入学生出生年份:");
            scanf("%d", &p->message.birth_Year);
            printf("请输入学生出生月份:");
            scanf("%d", &p->message.birth_Month);
            printf("请输入学生学历:");
            scanf("%s", &p->message.education);
            printf("请输入学生电话:");
            scanf("%d", &p->message.phone);
            printf("请输入学生住址:");
            scanf("%s", p->message.address);
            p->next = data;
            p = data;
            printf("请输入是否继续:");
            scanf("%d", &flag);
        }
        p->next = NULL;
    return L;
}
//查询学生成绩
int Find(LinkList* L) {
    int i;
    LinkList* p;
    p = L;
    printf("请输入所查找的编号:");
    scanf("%d", &i);
    while (p->next!=NULL&&i!=p->message.number) {
        p = p->next;    
    }
    if (i==p->message.number) {
        printf("学生姓名:%s\n", p->message.name);
        printf("学生性别:%s\n", p->message.sex);
        printf("学生年,月:%d %d\n", p->message.birth_Year, p->message.birth_Month);
        printf("学生学历:%s\n", p->message.education);
        printf("学生电话:%d\n", p->message.phone);
        printf("学生住址:%s\n", p->message.address);
        printf("\n");
    }
    else {
        printf("未找到该学号\n");
    }
    return 1;
}

我稍微改了下,他现在报错成p是0xccccccc

我调试了一下,发现,我的数据输入后,汉字变成了一堆屯屯屯,数字都变成一堆-83133之类的,我猜可能是不是我while语句判断,数据有误导致的

支持(0) 反对(0) 新手小白。 | 园豆:75 (初学一级) | 2021-12-08 20:23

@新手小白。: 我也是个新手,学的C# ,你之前报错的,可以参考一上这个:
取消VS中“取消对NULL指针的‘、、、’的引用”的警告的方法

支持(0) 反对(0) 中华鲟3670 | 园豆:922 (小虾三级) | 2021-12-08 20:37

@中华鲟3670: 好的谢谢了

支持(0) 反对(0) 新手小白。 | 园豆:75 (初学一级) | 2021-12-08 20:42

@新手小白。:
用我改的代码跑了好像没有报错:

支持(0) 反对(0) 中华鲟3670 | 园豆:922 (小虾三级) | 2021-12-08 20:43

@中华鲟3670: 主要就是查询的时候,就会报错

支持(0) 反对(0) 新手小白。 | 园豆:75 (初学一级) | 2021-12-08 20:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册