简单的结构体问题
#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的时候不执行函数。。试了好多次,不知道哪里出了问题,求解决。。 1. 函数ccmm 里加 fflush(stdin);
2. 使用struct student pt;这是数组存放, 用下标, 几个for里面加 谢谢你的回复,问题已经做了改进,把GETS()替换为了SCANF().因为会读进\N。所以比较字符串的时候返回值不为0,所以不会打印出内容。现在已经可以正常的运行了,FFLUSHU(STDIN)函数虽然可以清楚缓存。但不是标准的C库函数,我想知道有什么简单的方法可以清除缓冲中多余的输入列队。 dwer 发表于 2015-10-23 00:03
1. 函数ccmm 里加 fflush(stdin);
2. 使用struct student pt;这是数组存放, 用下标, 几个f ...
谢谢你的回复,问题已经做了改进,把GETS()替换为了SCANF().因为会读进\N。所以比较字符串的时候返回值不为0,所以不会打印出内容。现在已经可以正常的运行了,FFLUSHU(STDIN)函数虽然可以清楚缓存。但不是标准的C库函数,我想知道有什么简单的方法可以清除缓冲中多余的输入列队。 小伪 发表于 2015-10-23 21:00
谢谢你的回复,问题已经做了改进,把GETS()替换为了SCANF().因为会读进\N。所以比较字符串的时候返回值不 ...
其他方式不太了解了 dwer 发表于 2015-10-23 22:20
其他方式不太了解了
(1)strcmp()函数貌似之比较字符,我吧有’\n'和没有的‘\n’的字符串做了比较返回值还是为0.
(2)可是当我把gets()换成scanf()就可以查询到结果,用 gets()就不可以。不知道为什么。
页:
[1]