小伪 发表于 2015-10-21 20:32:25

简单的结构体问题

#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;
      double value;
      char xh;
      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;
      int i;
      char arr;
      char ch;
      printf("下面请依次输入本班同学的成绩\n");
      for (i = 0;i < STU_LEN;i++)//向结构数组输入内容
      {
                printf("input 学号:");
                gets(pt.xh);
                printf("input 姓名:");
                gets(pt.name);
                printf("input 成绩:");
                scanf("%lf",&pt.value);
                printf("input 生日 :(year-month-day)");
                scanf("%d%d%d",&pt.happy.year,&pt.happy.munth,&pt.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;
      int i;
      printf("请输入姓名:");
      gets(a);
      for (i = 0;i < n;i++)
      {
                if (strcmp(a,money.name) == 0)
                {
                  printf("name is %s",money.name);
                  printf("\nvalue is %f",money.value);
                  printf("\nxh is %s",money.xh);
                  printf("\nbirday is %d-%d-%d",money.happy.year,money.happy.munth,money.happy.day);
                }
      }
      
}
void mm(const struct student mon[],int n)
{
      char b;
      int i;
      printf("请输入学号:");
      gets(b);
      for (i = 0;i < n;i++)
                if (strcmp(b,mon.xh) == 0)
                {
                  printf("name is %s",mon.name);
                  printf("\nvalue is %f",mon.value);
                  printf("\nxh is %s",mon.xh);
                  printf("\nbirday is %d-%d-%d",mon.happy.year,mon.happy.munth,mon.happy.day);
                }
}



//编译可以通过,内容输入完,在输入1或者2的时候不执行函数。。试了好多次,不知道哪里出了问题,求解决。。

dwer 发表于 2015-10-23 00:03:17

1. 函数ccmm 里加 fflush(stdin);
2. 使用struct student pt;这是数组存放, 用下标, 几个for里面加

小伪 发表于 2015-10-23 21:00:08

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

小伪 发表于 2015-10-23 21:00:45

dwer 发表于 2015-10-23 00:03
1. 函数ccmm 里加 fflush(stdin);
2. 使用struct student pt;这是数组存放, 用下标, 几个f ...

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

dwer 发表于 2015-10-23 22:20:08

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

其他方式不太了解了

小伪 发表于 2015-10-24 20:17:59

dwer 发表于 2015-10-23 22:20
其他方式不太了解了

(1)strcmp()函数貌似之比较字符,我吧有’\n'和没有的‘\n’的字符串做了比较返回值还是为0.
(2)可是当我把gets()换成scanf()就可以查询到结果,用 gets()就不可以。不知道为什么。
页: [1]
查看完整版本: 简单的结构体问题