关于#c语言#的问题:把一个学生的信息(学号,性别)放在一个结构体变量中

把一个学生的信息(学号,名字,性别)放在一个结构体变量中,并把它们送到磁盘上去,直到用户输入一个"#"为止(需要有数组,函数,指针,结构体,文件的运用。需要答案和运行过程与结果)

定义一个结构体,用户输入#结束,把这个变量里面的内容保存到文件

刚好写个,供参考:

#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;
}

img

在下面函数内做加减


#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