标题:小新求教一个关于char型数据的录入问题
取消只看楼主
※C小新
Rank: 2
等 级:论坛游民
帖 子:8
专家分:20
注 册:2017-8-24
结帖率:100%
已结贴  问题点数:20 回复次数:4 
小新求教一个关于char型数据的录入问题
在以下这个程序,创建函数中,输入非零编号时,会直接跳过性别录入,该显示的字符都会出现,只是没有录入性别,会出现
/*
请输入性别:
请输入姓名:|
*/
这种情况,好像有什么被吸收了,求各位大神指导小新,谢谢。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

struct student
{
    int sno;
    char name[20];
    char sex;
    double score[3];
    struct student *next;
};
typedef struct student ST;

ST *create(ST *head)
{
    int total=0;
    FILE *fp;
    ST *p,*p1,*tail;
    fp=fopen("ST.txt","r");
    if(fp==NULL);
    {
        head=p=tail=NULL;
        while(1)
        {
            p=(ST*)malloc(sizeof(ST));
            p->next=NULL;
        bb1:printf("\n请输入学生学号(输入0结束录入):");
            scanf("%d",&p->sno);
            if(p->sno==0)
            {
                if(total==0)
                {
                    printf("\n你输入了0个学生信息,没有创建学生信息文件。\n");
                    getch();
                    free(p);
                    return (head);
                }
                else
                {
                    break;
                }
            }
            p1=head;
            while(p1!=NULL)
            {
                if(p->sno==p1->sno)
                {
                    printf("\n\n学生学号重复输入。按任意键返回重新输入。");
                    free(p);
                    getch();
                    goto bb1;
                }
                p1=p1->next;
            }
            printf("\n请输入学生性别:");
            scanf("%c",&p->sex);
            printf("\n请输入学生姓名:");
            scanf("%s",p->name);
            printf("\n请依次输入学生三门课成绩:");
            scanf("%lf%lf%lf",&p->score[0],&p->score[1],&p->score[2]);
            p->name[19]=0;
            
            if(head==NULL)
            {
                head=p;
                tail=p;
            }
            else
            {
                tail->next=p;
                tail=p;
            }
            total++;
        }
        tail->next=NULL;
        free(p);
        printf("\n\n总共输入了%d个学生信息。",total);
        save(head);
    }
    return head;
 }
搜索更多相关主题的帖子: 录入 输入 head NULL printf 
2017-08-24 10:22
※C小新
Rank: 2
等 级:论坛游民
帖 子:8
专家分:20
注 册:2017-8-24
得分:0 
回复 2楼 renkejun1942
改了之后,无法进入这个if语句。
看到你的改法,我才发现犯了低级错误加了分号。
去掉分号后,我的原问题仍然存在,还是无法录入性别。
2017-08-24 10:56
※C小新
Rank: 2
等 级:论坛游民
帖 子:8
专家分:20
注 册:2017-8-24
得分:0 
回复 6楼 renkejun1942
主函数写了,没有问题,,,,,,,所以忘记粘贴出来,只是把有错误地方的代码粘贴出来了我的失误,我也忘记粘贴了
2017-08-24 20:40
※C小新
Rank: 2
等 级:论坛游民
帖 子:8
专家分:20
注 册:2017-8-24
得分:0 
回复 5楼 wp231957
可是在我的编译器上,这个性别的数据录入会直接跳过,所以连最开始的创建功能都无法实现。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

struct student
{
    int sno;
    char name[20];
    char sex;
    double score[3];
    struct student *next;
};
typedef struct student ST;

ST *create(ST *head);     //创建学生文件
void save(ST *head);       //保存学生信息
ST *add(ST *head);         //添加学生信息
void seal(ST *head);      //显示学生信息
ST *delet(ST *head);       //删除学生信息
ST *change(ST *head);      //修改学生信息
void *search(ST *head);    //查找学生信息
void *sort(ST *head);      //排序查看
ST *read(ST *head);        //读文件

int main()
{
    ST *head;
    while(1)
    {
        int c;
        system("cls");
        printf("\n******************主菜单******************\n");
        printf("\n1.创建学生信息文件。");
        printf("\n2.查看学生信息。");
        printf("\n3.增加学生信息。");
        printf("\n4.删除学生信息。");
        printf("\n5.修改学生信息。");
        printf("\n6.查找学生信息。");
        printf("\n7.排序学生信息。");
        printf("\n******************************************\n");
        printf("\n请输入选项:");         
        scanf("%d",&c);
        switch(c)
        {
            case 1:head=create(head);
                break;
            case 2:head=read(head);
                if(head==NULL)
                {
                    printf("\n请先选择1!!!\n");
                    getch();
                }
                else
                    seal(head);
        }
     }
}

ST *create(ST *head)
{
    int total=0;
    FILE *fp;
    ST *p,*p1,*tail;
    fp=fopen("ST.txt","r");
    if(fp==NULL)
    {
        head=p=tail=NULL;
        while(1)
        {
            p=(ST*)malloc(sizeof(ST));
            p->next=NULL;
        bb1:printf("\n请输入学生学号(输入0结束录入):");
            scanf("%d",&p->sno);
            if(p->sno==0)
            {
                if(total==0)
                {
                    printf("\n你输入了0个学生信息,没有创建学生信息文件。\n");
                    getch();
                    free(p);
                    return (head);
                }
                else
                {
                    break;
                }
            }
            p1=head;
            while(p1!=NULL)
            {
                if(p->sno==p1->sno)
                {
                    printf("\n\n学生学号重复输入。按任意键返回重新输入。");
                    free(p);
                    getch();
                    goto bb1;
                }
                p1=p1->next;
            }

            printf("\n请输入学生性别:");
            scanf("%c",&p->sex);
            printf("\n请输入学生姓名:");
            scanf("%s",p->name);
            printf("\n请依次输入学生三门课成绩:");
            scanf("%lf%lf%lf",&p->score[0],&p->score[1],&p->score[2]);
            p->name[19]=0;
            
            if(head==NULL)
            {
                head=p;
                tail=p;
            }
            else
            {
                tail->next=p;
                tail=p;
            }
            total++;
        }
        tail->next=NULL;
        free(p);
        printf("\n\n总共输入了%d个学生信息。",total);
        save(head);
    }
    return head;
 }
 
void save(ST *head)
{
    FILE *fp;
    ST *t;
    if((fp=fopen("ST.txt","w"))==NULL)
    {
        printf("\n打开文件失败!\n");
        getch();
        exit(0);
     }
    t=head;
    while(t!=NULL)
    {
        fwrite(t,sizeof(ST),1,fp);
        t=t->next;
    }
    fclose(fp);
    printf("\n保存成功!\n");
    getch();
 }
 
void seal(ST *head)      //显示学生信息
{
    ST *p=head;
    int i=0;
    printf("\n学号    姓名    性别    分数\n\n");
    while(p!=NULL)
    {
        printf("%d     %s     %c     %.2lf   %.2lf   %.2lf\n",p->sno,p->name,p->sex,p->score[0],p->score[1],p->score[2]);
        p=p->next;
        i++;
    }
    printf("\n共有%d名学生。\n",i);
    getch();
 }
 
ST *read(ST *head)
{
    FILE *fp;
    ST *p,*p1;
    if((fp=fopen("ST.txt","r"))==NULL)
    {
         printf("\n打开文件失败,没有该文件。\n");
         printf("\n按任意键返回主菜单\n");
         getch();
         return 0;
    }
    rewind(fp);
    p1=(ST *)malloc(sizeof(ST));
    head=p=p1;
    while(!feof(fp))
    {
        if(fread(p1,sizeof(ST),1,fp)!=1);
            break;
        p1->next=(ST *)malloc(sizeof(ST));
        p=p1;
        p1=p1->next;
    }
    p->next=NULL;
    fclose(fp);
    return head;
 }
2017-08-24 20:47
※C小新
Rank: 2
等 级:论坛游民
帖 子:8
专家分:20
注 册:2017-8-24
得分:0 
问题目前解决了,当前函数能够完整运行,谢谢大家
2017-08-25 23:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-480254-1-1.html




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

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