c语言-C语言:在子函数中修改结构变量中元素的值

问题描述

C语言:在子函数中修改结构变量中元素的值

要写一个处理学生成绩信息的程序,使用单向链表,创建,遍历已经没有问题,但在修改结点的数据时出现问题,输入数据后程序就停止运行。
修改的思路是先根据学号定位到指定结点,然后修改数据,修改函数如下

 void Correct(float *a,float *b,float *c,float *d,float *e,float *f)
{
    printf("请依次输入学生正确的的英语 数学 物理 C语言成绩n");
    scanf("%f%f%f%f",a,b,c,d);
    *e=*a+*b+*c+*d;
    *f=*e/4;
}

程序执行到上面时总是出现问题,不知道是什么原因,也尝试过其他修改的方法:只传结点的地址,同样出现问题;查找与修改函数合并,找到结点直接修改也是有问题,不知道为什么,代码有些长,还希望有人可以指导一下,非常感谢。
完整代码如下:

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct stu{
    char num[15];
    char name[20];
    float EngSco;
    float MathSco;
    float PhySco;
    float CSco;
    float TotalSco;
    float AveSco;
    int GoOn;
    struct stu * next;
};
void PrtMenu();
void CreatList(struct stu **headp);/*创建链表并输入数据*/
void PrtInf(struct stu *headp);/*输出链表中的某些数据*/
void Correct(float *a,float *b,float *c,float *d,float *e,float *f);/*修改链表中某结点元素的数据*/
void PrtData(struct stu *headp);/*输出链表中的某些数据*/
struct stu* Search(struct stu *headp);/*定位需要修改的结点的地址*/
int main()
{
    int choice;
    struct stu *head=NULL,*revise=NULL;
Order:
    PrtMenu();
    scanf("%d",&choice);
    if(choice<0||choice>5){
        printf("指令错误,请重新输入指令n");
        goto Order;
    }
    else
    switch(choice)
    {
        case 0:
            system("CLS");
            break;
        case 1:
            CreatList(&head);break;
        case 2:
            PrtInf(head);break;
        case 3:
            revise=Search(head);
            Correct(&(revise->EngSco),&(revise->MathSco),&(revise->PhySco),&(revise->CSco),&(revise->TotalSco),&(revise->AveSco));break;
        case 4:
            PrtData(head);break;
        case 5:
            return 0;
    }
    goto Order;
    return 0;
}
void PrtMenu()
{
    printf("-----功能选择-----n");
    printf("0.清屏并显示菜单n");
    printf("1.输入学生信息n");
    printf("2.输出学生各项信息n");
    printf("3.修改学生指定数据项的内容n");
    printf("4.输出各位同学的学号、姓名、四门课的总成绩和平均成绩n");
    printf("5.退出系统n");
    printf("------------------n");
    printf("请输入指令前的序号n");
}
void CreatList(struct stu **headp)
{
    struct stu *loc_head=NULL,*tail;
    loc_head=(struct stu*)malloc(sizeof(struct stu));
    printf("请输入学生的学号n");
    scanf("%s",loc_head->num);
    printf("请输入学生的姓名n");
    scanf("%s",loc_head->name);
    printf("请依次输入学生的英语 数学 物理 C语言成绩n");
    scanf("%f%f%f%f",&loc_head->EngSco,&loc_head->MathSco,&loc_head->PhySco,&loc_head->CSco);
    loc_head->TotalSco=loc_head->EngSco+loc_head->MathSco+loc_head->PhySco+loc_head->CSco;
    loc_head->AveSco=loc_head->TotalSco/4;
    tail=loc_head;
    printf("继续输入请按1,输入完成请按0n");
    scanf("%d",&tail->GoOn);
    if(tail->GoOn==0)
    goto end;
    else
    while(1)
    {
        tail->next=(struct stu*)malloc(sizeof(struct stu));
        tail=tail->next;
        printf("请输入学生的学号n");
        scanf("%s",tail->num);
        printf("请输入学生的姓名n");
        scanf("%s",tail->name);
        printf("请依次输入学生的英语 数学 物理 C语言成绩n");
        scanf("%f%f%f%f",&tail->EngSco,&tail->MathSco,&tail->PhySco,&tail->CSco);
        tail->TotalSco=tail->EngSco+tail->MathSco+tail->PhySco+tail->CSco;
        tail->AveSco=tail->TotalSco/4;
        printf("继续输入请按1,输入完成请按0n");
        scanf("%d",&tail->GoOn);
        if(!tail->GoOn)
        break;
    }
end:
    tail->next=NULL;
    *headp=loc_head;
}
void PrtInf(struct stu *headp)
{
    struct stu *current=headp;
    printf("学号t姓名t英语t高数t物理tC语言tn");
    while(current)
    {
        printf("%st%st%.2ft%.2ft%.2ft%.2ftn",current->num,current->name,current->EngSco,current->MathSco,current->PhySco,current->CSco);
        current=current->next;
    }
}
void Correct(float *a,float *b,float *c,float *d,float *e,float *f)
{
    printf("请依次输入学生正确的的英语 数学 物理 C语言成绩n");
    scanf("%f%f%f%f",a,b,c,d);
    *e=*a+*b+*c+*d;
    *f=*e/4;
}
void PrtData(struct stu *headp)
{
    struct stu *current=headp;
    printf("学号t姓名t总分t平均分tn");
    while(current)
    {
        printf("%st%st%.2ft%.2ftn",current->num,current->name,current->TotalSco,current->AveSco);
        current=current->next;
    }
}
struct stu* Search(struct stu *headp)
{
    struct stu *current=headp;
    char aim[15];
    int flag;
    printf("请输入要修改数据的学生的学号n");
    scanf("%s",aim);
    while(current)
    {
    flag=strcmp(current->num,aim);
    if(flag=0)
    break;
    else current=current->next;
    }
    return current;
}

解决方案

是前面Search()函数出的问题,if()中的要是“==”=======================================。。。。

解决方案二:

谢谢!相同的问题得到了解决。

时间: 2024-12-19 05:02:21

c语言-C语言:在子函数中修改结构变量中元素的值的相关文章

函数指针和数组指针的区别,函数指针在结构体中怎么实现排序?

问题描述 函数指针和数组指针的区别,函数指针在结构体中怎么实现排序? 求咨询下,结构体浮点数组的排序,多重条件用函数指针传参数给库函数怎么实现排序呢? 解决方案 参考:http://blog.csdn.net/lethic/article/details/7781203 解决方案二: 函数指针及结构体 解决方案三: 函数指针:指向函数入口的指针,为指向代码段的一个地址. 数组指针:指向数组的指针.

fonts-android开发中修改应用程序中的字体

问题描述 android开发中修改应用程序中的字体 在代码中修改字体,我知道有这么一种方法 AssetManager mgr=getAssets();//得到AssetManager Typeface tf=Typeface.createFromAsset(mgr, "fonts/cube.ttf");//根据路径得到Typeface字体 textView.setTypeface(tf);//设置字体 但是这样修改字体的话会增加整个项目打包后的大小吧,我的思路是通过引导用户去在线下载想

Linux有问必答:如何在Linux中修改环境变量PATH

Linux有问必答:如何在Linux中修改环境变量PATH 提问: 当我试着运行一个程序时,它提示"command not found". 但这个程序就在/usr/local/bin下.我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以不用指定路径来运行这个命令了. 在Linux中,PATH环境变量保存了一系列的目录用于用户在输入的时候搜索命令.PATH变量的值由一系列的由冒号分隔的绝对路径组成.每个用户都有特定的PATH环境变量(由系统级的PATH变量初始化)

Linux中修改环境变量及生效方法_Linux

在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是"永久的". 要让刚才的修改马上生效,需要执行以下代码 source /etc/profile 以上这篇Linux中修改环境变量及生效方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持. 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上角搜索

c语言-C语言中select函数 应用于网络存储中配合fread/fwrite是否存在阻塞问题

问题描述 C语言中select函数 应用于网络存储中配合fread/fwrite是否存在阻塞问题 利用fread fwrite 读写网络存储上的文件时,是否会出现阻塞问题? 我的感觉是会出现但是无法通过select判断,因为select判断的是内容是否存在,就是文件是否存在,而对于文件fread fwrite没有发现文件也会报错 但是一旦文件存在开始读写以后发生了网络传输中断引起阻塞 那么还是会挂住 而所谓的非阻塞机制无法发挥作用 不知道我的理解是否正确? 谢谢大家发表看法. 解决方案 阻塞和非

Linux中修改环境变量

<1>Linux 的变量作用范围可分为两类:环境变量和本地变量 环境变量,或者称为全局变量,存在与所有的shell 中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了.Linux 的环境变量具有继承性,即子shell 会继承父shell 的环境变量. 本地变量,当前shell 中的变量,很显然本地变量中肯定包含环境变量.Linux 的本地变量的非环境变量不具备继承性. set 用于显示与设置当前本地 变量.单独一个set 就显示了当前环境的所有的变量,它肯定包括环境变量和一些非环境变量

UPDATE 语句用于中修改数据库表中的数据

更新数据库中的数据 UPDATE 语句用于在数据库表中修改数据. 语法 UPDATE table_name SET column_name = new_value WHERE column_name = some_value 注释:SQL 对大小写不敏感.UPDATE 与 update 等效. 为了让 PHP 执行上面的语句,我们必须使用 mysql_query( 函数.该函数用于向 SQL 连接发送查询和命令. 例子 稍早时,我们在本教程中创建了一个名为 "Person" 的表.它看

Javascript中如何执行变量中的命令语句:即所谓的宏替换

由其做动态编程时非常有用,必须符合js中的语法,用eval能够执行. var aaa="alert('这是变量中的语句')"; eval(aaa); 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/script/

Linux中修改环境变量PATH

PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻.用以下命令可以看到 PATH的值. $ echo $PATH 例如,在主机中,用户yogin的PATH值为: /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/yogin/bin 其中":"为分隔符.所以,上面的一串目录可以看成是如下的目录列表. /opt/kde/bin /usr/local/bin /bin:/usr/bin /u