鱼C论坛

 找回密码
 立即注册
查看: 1366|回复: 5

[已解决]简单的结构体问题

[复制链接]
发表于 2015-10-21 20:32:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <windows.h>
#include <string.h>
#define LEN 10 //保存学生的名字
#define STU_LEN 3//5个学生
struct birday{
        int year;
        int munth;
        int day;
};
struct student{
        char name[LEN];
        double value;
        char xh[5];
        struct birday happy;
};
void cc(const struct student money[],int n);
void mm(const struct student money[],int n);
int main (void)
{
        struct student pt[STU_LEN];
        int i;
        char arr[10];
        char ch;
        printf("下面请依次输入本班同学的成绩\n");
        for (i = 0;i < STU_LEN;i++)//向结构数组输入内容
        {
                printf("input 学号:");
                gets(pt[i].xh);
                printf("input 姓名:");
                gets(pt[i].name);
                printf("input 成绩:");
                scanf("%lf",&pt[i].value);
                printf("input 生日 :(year-month-day)");
                scanf("%d%d%d",&pt[i].happy.year,&pt[i].happy.munth,&pt[i].happy.day);
                while (getchar() != '\n')
                    continue;
                system("cls");
               
        }
        printf("if you want find witcha student score,please enter the number");
        printf("\nyou can enter 1 and 2");
        printf("\n1:输入姓名查找");
        printf("\n2:输入学号查找\n");
        while (ch = getchar())//判断输入,调用函数,
        {
                if (ch == '1')
                    cc(pt,STU_LEN);
                else if (ch =='2')
                    mm(pt,STU_LEN);
                else
                    printf("input again!");
        }
        
return 0;
        
}
void cc(const struct student money[],int n)
{
        char a[10];
        int i;
        printf("请输入姓名:");
        gets(a);
        for (i = 0;i < n;i++)
        {
                if (strcmp(a,money[i].name) == 0)
                {
                    printf("name is %s",money[i].name);
                    printf("\nvalue is %f",money[i].value);
                    printf("\nxh is %s",money[i].xh);
                    printf("\nbirday is %d-%d-%d",money[i].happy.year,money[i].happy.munth,money[i].happy.day);
                }
        }
        
}
void mm(const struct student mon[],int n)
{
        char b[10];
        int i;
        printf("请输入学号:");
        gets(b);
        for (i = 0;i < n;i++)
                if (strcmp(b,mon[i].xh) == 0)
                {
                    printf("name is %s",mon[i].name);
                    printf("\nvalue is %f",mon[i].value);
                    printf("\nxh is %s",mon[i].xh);
                    printf("\nbirday is %d-%d-%d",mon[i].happy.year,mon[i].happy.munth,mon.happy.day);
                }
}



//编译可以通过,内容输入完,在输入1或者2的时候不执行函数。。试了好多次,不知道哪里出了问题,求解决。。
[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
最佳答案
2015-10-23 00:03:17
1. 函数cc  mm 里加 fflush(stdin);
2. 使用struct student pt[STU_LEN];  这是数组存放, 用下标, 几个for里面加[i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-23 00:03:17 | 显示全部楼层    本楼为最佳答案   
1. 函数cc  mm 里加 fflush(stdin);
2. 使用struct student pt[STU_LEN];  这是数组存放, 用下标, 几个for里面加[i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-23 21:00:08 | 显示全部楼层
谢谢你的回复,问题已经做了改进,把GETS()替换为了SCANF().因为会读进\N。所以比较字符串的时候返回值不为0,所以不会打印出内容。现在已经可以正常的运行了,FFLUSHU(STDIN)函数虽然可以清楚缓存。但不是标准的C库函数,我想知道有什么简单的方法可以清除缓冲中多余的输入列队。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-23 21:00:45 | 显示全部楼层
dwer 发表于 2015-10-23 00:03
1. 函数cc  mm 里加 fflush(stdin);
2. 使用struct student pt[STU_LEN];  这是数组存放, 用下标, 几个f ...

谢谢你的回复,问题已经做了改进,把GETS()替换为了SCANF().因为会读进\N。所以比较字符串的时候返回值不为0,所以不会打印出内容。现在已经可以正常的运行了,FFLUSHU(STDIN)函数虽然可以清楚缓存。但不是标准的C库函数,我想知道有什么简单的方法可以清除缓冲中多余的输入列队。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-10-23 22:20:08 | 显示全部楼层
小伪 发表于 2015-10-23 21:00
谢谢你的回复,问题已经做了改进,把GETS()替换为了SCANF().因为会读进\N。所以比较字符串的时候返回值不 ...

其他方式不太了解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-24 20:17:59 | 显示全部楼层
dwer 发表于 2015-10-23 22:20
其他方式不太了解了

(1)strcmp()函数貌似之比较字符,我吧有’\n'和没有的‘\n’的字符串做了比较返回值还是为0.
(2)可是当我把gets()换成scanf()就可以查询到结果,用 gets()就不可以。不知道为什么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表