把一个学生的信息(学号,名字,性别)放在一个结构体变量中,并把它们送到磁盘上去,直到用户输入一个"#"为止(需要有数组,函数,指针,结构体,文件的运用。需要答案和运行过程与结果)
定义一个结构体,用户输入#结束,把这个变量里面的内容保存到文件
刚好写个,供参考:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define error 0
typedef int Status;
typedef struct Person
{
char name[10]; //姓名
char age[10]; //年龄
char num[15]; //学号
char sex[4]; //性别
char place[20]; //籍贯
}Person;
typedef struct lnode {
Person data;
struct lnode* next;
}LNode, * LinkList;
void Inputlist(LinkList* L)
{
LNode* q;
(*L) = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
q = (*L);
printf("输入学生信息,姓名字段输入“#”结束:\n");
while (1){ //输入学生的信息,以 “#” 结束
LinkList p = (LinkList)malloc(sizeof(LNode));
p->next = NULL;
printf("姓名:");
scanf("%s", p->data.name);
if (strcmp(p->data.name, "#") == 0) {
free(p);
break;
}
printf("年龄:");
scanf("%s", p->data.age);
printf("学号:");
scanf("%s", p->data.num);
printf("性别:");
scanf("%s", p->data.sex);
printf("籍贯:");
scanf("%s", p->data.place);
q->next = p;
q = p;
}
}//输入数据,创建链表保存
Status Writelist(LinkList L)
{
if (L->next == NULL)
return error;
FILE* fp;
errno_t err;
LinkList p = L->next;
if ((err = fopen_s(&fp, "test", "w")) != 0) {
printf("error,cannot open this file\n");
return error;
exit(1);
}
while (p != NULL) {
fprintf(fp, "姓名:%s 年龄:%s 学号:%s 性别:%s 籍贯:%s\n",
p->data.name, p->data.age, p->data.num, p->data.sex, p->data.place);
p = p->next;
}
fclose(fp);
return OK;
}//存储链表数据到文件
Status Readlist(LinkList* L)
{
FILE* fp;
errno_t err;
if ((err = fopen_s(&fp, "test", "r")) != 0) {
printf("error,cannot open this file\n");
return error;
}
if (!feof(fp)) {
char buff[1003] = { 0 };
LinkList phead = NULL, p = NULL;
phead = (*L) = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
while (1)
{
memset(buff, 0, 1003);
if (fgets(buff, 1003, fp) == NULL) break;
p = (LinkList)malloc(sizeof(LNode));
if (p == NULL) {
printf("No memory!");
exit(0);
}
p->next = NULL;
int ret = sscanf(buff, "%*[^:]:%s %*[^:]:%s %*[^:]:%s %*[^:]:%s %*[^:]:%s",
p->data.name, p->data.age, p->data.num, p->data.sex, p->data.place);
if (ret == 5) {
phead->next = p;
phead = p;
}
else
free(p);
}
fclose(fp);
return OK;
}
else{
fclose(fp);
return error;
}
}//从文件读取数据到链表
void print(LinkList L)
{
LinkList q = L;
while (q->next) {
printf("%s %s %s %s %s\n", q->next->data.name, q->next->data.num,
q->next->data.age, q->next->data.sex, q->next->data.place);
q = q->next;
}
}//输出链表
int main()
{
int i, n = 3;
LinkList L1 = NULL, L2 = NULL;
Inputlist(&L1);
print(L1); //输出链表 L1
Writelist(L1); //写入文件
Readlist(&L2); //文件读出到链表
print(L2); //输出链表 L2
return 0;
}
在下面函数内做加减
#include<stdio.h>
int main()
{
struct Student
{
long int num;
char name[20];
char sex[5];
char addr[20];
}a = {1010,"yaoyao","Man","xi'an"};//定义结构体变量a并初始化
printf("num:%ld\nname:%s\nsex:%s\naddress:%s\n", a.num, a.name, a.sex, a.addr);
return 0;
}
遇到一个#为止
https://blog.csdn.net/qq_48167493/article/details/120511912