| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 983 人关注过本帖
标题:一个scanf函数不需要我赋值就被自动赋值,调试测出来自动赋值为'10',不知道 ...
只看楼主 加入收藏
yz912498286
Rank: 1
等 级:新手上路
帖 子:49
专家分:3
注 册:2015-8-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:22 
一个scanf函数不需要我赋值就被自动赋值,调试测出来自动赋值为'10',不知道为什么?
aa创建一个学生信息系统,有输入,打印,查找与修改功能,在修改功能函数中出现了问题,一个scanf函数不需要我赋值就被自动赋值,调试测出来自动赋值为'10',问题具体位置在注释中,不知道为什么会自动赋值,自己对该scanf函数也无法赋值??
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define  LEN sizeof(struct Student)
struct Student
{
    int   num;
    char  name[20];
    float score[3];
    struct Student *next;
};

struct Student *creat(void)           //创建学生信息链表
{
    struct Student *head;
    struct Student  *p1;
    struct Student  *p2;
    p1=(struct Student*)malloc(LEN);
    head=p1,p2=p1;
    printf("请按格式输入学生信息,当输入学号为零时,输入结束\n");
    printf("输入学号:");
    scanf("%d",&p1->num);
    if(p1->num==0)
    {
        printf("输入无效,请重新输入");
        printf("输入学号:");
        scanf("%d",&p1->num);
    }        
    printf("输入姓名:");
    scanf("%s",p1->name);
    printf("成绩:语文 数学 英语 ");
    scanf("%f%f%f",&p1->score[0],&p1->score[1],&p1->score[2]);
    while(p1->num!=0)
    {
        p1=(struct Student*)malloc(LEN);
        printf("输入学号:");
        scanf("%d",&p1->num);
        if(p1->num==0) break;
        printf("输入姓名:");
        scanf("%s",p1->name);
        printf("成绩:语文 数学 英语 ");
        scanf("%f%f%f",&p1->score[0],&p1->score[1],&p1->score[2]);
        p2->next=p1;
        p2=p1;
    }
    p2->next=NULL;
    printf("输入结束!\n");
    return head;
}

void  print(struct Student *head)      //输出学生信息链表
{
    struct Student *p;
    int i;
    float ave,sum;
    sum=0;
    p=head;
    printf("\n");
    printf("学生信息如下\n");
    printf("学号  姓名  语文  数学  英语  平均分\n");
    while(p!=NULL)
    {
        printf("%2d  ",p->num);
        printf("%5s  ",p->name);
        for(i=0;i<3;i++)
        {   sum=sum+p->score[i];
            printf("%5.1f ",p->score[i]);
        }
        ave=sum/3;
        printf(" %4.1f",ave);
        printf("\n");
        p=p->next;
    }
}

void search(struct Student *head)        //查找,修改某个学生信息功能
{   struct Student *p;
    int i,num,zhaodao;                   //zhaodao代表找到,用于最后判断链表中有无要查找学生的信息
    float sum,ave;
    char yes;                            //yes用于找到该生后判断是否修改该生信息
    sum=0;
    zhaodao=0;
    printf("输入你要查找学生的学号 ");
    scanf("%d",&num);
    p=head;
    while(p!=NULL)
    {
        if(p->num==num)
        {
            printf("您要找的学生信息\n");
            printf("学号  姓名  语文  数学  英语  平均分\n");
            printf("%2d  ",p->num);
            printf("%5s  ",p->name);
            for(i=0;i<3;i++)
            {   sum=sum+p->score[i];
            printf("%5.1f ",p->score[i]);
            }
            ave=sum/3;
            printf(" %4.1f\n",ave);
            zhaodao=1;                             //zhaodao为1代表该生找到了
            printf("是否要修改该生信息:y/n?");     //问题出在这里,这个地方的yes ,不需要我赋值,总是被自动赋值,调试测出来赋值为'10',
            scanf("%c",&yes);                      //运行到这个scanf时,不进行赋值就可以调试到下一行了?是什么原因呀?试了好几遍了?
            if(yes=='y')                          
            {
                printf("输入该生更新后的信息\n");
                    printf("输入学号:");
                scanf("%d",&p->num);
                printf("输入姓名:");
                scanf("%s",p->name);
                printf("成绩:语文 数学 英语 ");
                scanf("%f%f%f",&p->score[0],&p->score[1],&p->score[2]);
            }
        }
        p=p->next;
    }
    if(zhaodao==0)
        printf("\n您找的学生不存在!");
}

int  main()
{
    struct Student *ahead;
    ahead=creat();
    print(ahead);
    search(ahead);
    print(ahead);
    return 0;
}
搜索更多相关主题的帖子: include 信息 
2015-09-20 18:28
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:5 
程序代码:
void search(struct Student *head)        //查找,修改某个学生信息功能
{   struct Student *p;
    int i,num,zhaodao;                   //zhaodao代表找到,用于最后判断链表中有无要查找学生的信息
    float sum,ave;
    char yes='n';                            //yes用于找到该生后判断是否修改该生信息
    sum=0;
    zhaodao=0;
    printf("输入你要查找学生的学号 ");
    scanf("%d",&num);
    p=head;
    while(p!=NULL)
    {
        if(p->num==num)
        {
            printf("您要找的学生信息\n");
            printf("学号  姓名  语文  数学  英语  平均分\n");
            printf("%2d  ",p->num);
            printf("%5s  ",p->name);
            for(i=0;i<3;i++)
            {   sum=sum+p->score[i];
            printf("%5.1f ",p->score[i]);
            }
            ave=sum/3;
            printf(" %4.1f\n",ave);
            zhaodao=1;                             //zhaodao为1代表该生找到了
            printf("是否要修改该生信息:y/n?");     //问题出在这里,这个地方的yes ,不需要我赋值,总是被自动赋值,调试测出来赋值为'10',
            scanf("%c",&yes);                      //运行到这个scanf时,不进行赋值就可以调试到下一行了?是什么原因呀?试了好几遍了?
            if(yes=='y')                          
            {
                printf("输入该生更新后的信息\n");
                    printf("输入学号:");
                scanf("%d",&p->num);
                printf("输入姓名:");
                scanf("%s",p->name);
                printf("成绩:语文 数学 英语 ");
                scanf("%f%f%f",&p->score[0],&p->score[1],&p->score[2]);
            }
        yes='n';
        }
        p=p->next;
    }
    if(zhaodao==0)
        printf("\n您找的学生不存在!");
}

剑栈风樯各苦辛,别时冰雪到时春
2015-09-20 18:34
李掌柜
Rank: 6Rank: 6
等 级:侠之大者
帖 子:94
专家分:406
注 册:2015-6-18
收藏
得分:5 
楼主因该没有处理缓冲区问题

照片是可以做成小游戏的,快来私聊我吧!
2015-09-20 18:42
yz912498286
Rank: 1
等 级:新手上路
帖 子:49
专家分:3
注 册:2015-8-24
收藏
得分:0 
回复 3楼 李掌柜
怎么解决呢?
2015-09-20 19:13
yz912498286
Rank: 1
等 级:新手上路
帖 子:49
专家分:3
注 册:2015-8-24
收藏
得分:0 
回复 2楼 林月儿
就是这个函数中的scanf有问题,版组知道原因吗?
2015-09-20 19:15
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:5 
在scanf()函数后面加
fflush(stdin);

while (getchar() != '\n')
    continue;
2015-09-20 19:27
yz912498286
Rank: 1
等 级:新手上路
帖 子:49
专家分:3
注 册:2015-8-24
收藏
得分:0 
回复 6楼 hjx1120
是scanf的前面还是后面呀?怎么感觉应该写在前面释放?我对缓存不是很了解
2015-09-20 19:42
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 
前面后面都试下咯,感觉这东西害死人,实践和调试才是硬道理
2015-09-20 19:47
yz912498286
Rank: 1
等 级:新手上路
帖 子:49
专家分:3
注 册:2015-8-24
收藏
得分:0 
回复 6楼 hjx1120
用fflush<stdin>解决了,这个缓冲的知识在谭浩强c语言课本上没看到呀?这些知识是不是属于文件哪一张的内容呀
2015-09-20 19:50
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 
标准库里面的东西 good luck
2015-09-20 19:53
快速回复:一个scanf函数不需要我赋值就被自动赋值,调试测出来自动赋值为'10', ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018568 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved