标题:小新求教一个关于char型数据的录入问题
只看楼主
※C小新
Rank: 2
等 级:论坛游民
帖 子:8
专家分:20
注 册:2017-8-24
结帖率:100%
已结贴  问题点数:20 回复次数:9 
小新求教一个关于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
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:10 
    if(fp==NULL);

改成 if( fp != NULL )

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-08-24 10:40
※C小新
Rank: 2
等 级:论坛游民
帖 子:8
专家分:20
注 册:2017-8-24
得分:0 
回复 2楼 renkejun1942
改了之后,无法进入这个if语句。
看到你的改法,我才发现犯了低级错误加了分号。
去掉分号后,我的原问题仍然存在,还是无法录入性别。
2017-08-24 10:56
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:10 
main函数呢  没有main 咋调试啊  还有神马save

DO IT YOURSELF !
2017-08-24 14:21
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
实测这样是没有问题的

程序代码:
void main()
{
    char a;
    char s[100];
    printf("\n请输入学生性别:");
    scanf("%c",&a);
    printf("\n请输入学生姓名:");
    scanf("%s",s);
    printf("%c  %s \n",a,s);
}

DO IT YOURSELF !
2017-08-24 14:24
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 4楼 wp231957
我竟然没有注意到主楼的代码没有main函数,太可怕了。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-08-24 18:20
※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
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
case 1:head=create(head);  这句代码本身就有问题  head作为一个野指针直接传导create里 能有预想中的结果出现吗  其他语句没看

DO IT YOURSELF !
2017-08-25 14:33
※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.021600 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved