Fskingmax 2020-03-26 21:54 采纳率: 100%
浏览 221

内核链表list_for_each进不去

#include
#include
#include
#include "list.h"

typedef struct student//创建结构体
{
char buf_name[20];
int age;
int class;
float score;
struct list_head list;
}stu, *st;

st head;
FILE *scr_fp;
st create_head();//创建头节点
st create_new();//创建分节点
void add_stu();//添加学生信息
void view_stu();//查看学生信息
void delete_stu();//删除学生信息
void save_stu();//将文件中的学生信息保存到链表中
void save_file();//将数据保存到文件中

int main(int argc, char const *argv[])
{
head = create_head();
save_stu();

while(1)
{
    int n;
    printf("1---添加学生信息 2---查看学生信息 3---删除学生信息 4---退出\n");
    scanf("%d",&n);
    switch(n)
    {
        case 1 : add_stu();break;

        case 2 : view_stu();break;

        case 3 : delete_stu();break;

    }
    if(n == 4)
    {

        break;
    }
}

fclose(scr_fp);
return 0;

}

st create_head()
{
head = malloc(sizeof(stu));
INIT_LIST_HEAD(&head->list);

return head;

}

st create_new()
{
st new = malloc(sizeof(stu));
if(new != NULL)
bzero(&new->list, sizeof(struct list_head));

return new;

}

void save_file()//将数据保存到文件
{
st p;
struct list_head *pos;

list_for_each(pos, &head->list)
{
    p = list_entry(pos, struct student, list);
    fprintf(scr_fp,"%s %d %d %.2f\n", p->buf_name, p->age, p->class, p->score);
}

}

void save_stu()
{
scr_fp = fopen("1.txt","a+");//以可读可写的方式打开原文件
if(scr_fp == NULL)//判断是否成功打开文件
{
perror("fopen() failed");
return ;
}

while(1)
 {
    st new = create_new();
    fscanf(scr_fp, "%s %d %d %f\n", new->buf_name, &new->age, &new->class, &new->score);//从文件读取数据
    //printf("姓名:%s  年龄:%d  班级:%d  成绩:%.2f\n", new->buf_name, new->age, new->class, new->score);

    if(feof(scr_fp))//如果读到文件末尾 退出循环
        break;
}

}

void add_stu()
{
st new = create_new();
printf("请输入学生信息:姓名 年龄 班级 成绩\n");
scanf("%s%d%d%f", new->buf_name, &new->age, &new->class, &new->score);//输入学生信息

FILE *scr_fp = fopen("1.txt","w+");//以清空,可写的方式打开原文件
if(scr_fp == NULL)//判断是否成功打开文件
{
    perror("fopen() failed");
    return ;
}

}

void delete_stu()
{
scr_fp = fopen("1.txt","w+");//以清空,可写的方式打开原文件
if(scr_fp == NULL)//判断是否成功打开文件
{
perror("fopen() failed");
return ;
}

st p;
struct list_head *pos, *n;
char buf_del[20];
printf("请输入要删除的学生姓名:\n");
scanf("%s",buf_del);

list_for_each_safe(pos,n,&head->list)
{
    p = list_entry(pos,struct student,list);
    if(strcmp(p->buf_name,buf_del)==0)
    {
        list_del(&p->list);
        return ;
    }
}
printf("未找到该学生信息\n");

}

void view_stu()
{
st p;
struct list_head *pos;

list_for_each(pos, &head->list)
{
    p = list_entry(pos, struct student, list);

    printf("姓名:%s  年龄:%d  班级:%d  成绩:%.2f\n", p->buf_name, p->age, p->class, p->score);
}

}

list_for_each和list_for_each_safe 两个函数进不去是怎么回事呀

  • 写回答

1条回答 默认 最新

  • GKatHere 2020-03-28 04:04
    关注

    ...你在定义本地函数?(本地函数定义是非法的);
    试试 lamda:
    auto list_for_each = &
    {
    p = list_entry(pos, struct student, head->list);//cc

    printf("姓名:%s  年龄:%d  班级:%d  成绩:%.2f\n", p->buf_name, p->age, p->class, p->score);
    

    }

    评论

报告相同问题?

悬赏问题

  • ¥20 求用stm32f103c6t6在lcd1206上显示Door is open和password:
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类