请教大家一个小程序

wyckingyzj 2011-02-27 10:49:34
#include<stdio.h>

struct student
{
char num[10];
char name[10];
char sex;
}stu[2];

void main()
{
int t;
for(t=0;t<2;t++)
{
printf("输入第%d个学生的学号:",t+1);
gets(stu[t].num);
printf("输入第%d个学生的名字:",t+1);
gets(stu[t].name);
printf("输入第%d个学生的性别:",t+1);
getchar();
scanf("%c",&stu[t].sex);
}
struct student *p;
p=stu;
for(t=0;t<2;t++)
{
printf("学生的学号:%s\n",stu[t].num);
printf("学生的姓名:%s\n",stu[t].name);
printf("学生的性别:%c\n",stu[t].sex);
printf("\n");
}
printf("\n\n");
for(t=0;t<2;t++)
{
printf("学生的学号:%s\n",(p+t)->num);
printf("学生的姓名:%s\n",(p+t)->name);
printf("学生的性别:%c\n",(p+t)->sex);
printf("\n");

}
}
请问一下各位大侠们为什么在运行时打印不出sex???
...全文
76 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
rtygbwwwerr 2011-02-27
  • 打赏
  • 举报
回复
那个读入的循环也可以这样改:
for(t=0;t<2;t++)
{
printf("输入第%d个学生的学号:",t+1);
gets(stu[t].num);
printf("输入第%d个学生的名字:",t+1);
gets(stu[t].name);
printf("输入第%d个学生的性别:",t+1);
scanf("%c",&stu[t].sex);
getchar();//将最后输入的那个回车读出并清除出缓冲区

}
seenoor 2011-02-27
  • 打赏
  • 举报
回复

getchar();
scanf("%c",&stu[t].sex);

这里的getchar()读取了stu[t].sex的输入,如果调试就会发现stu[t].sex的是没有数据的,只要去掉就可以了。
rtygbwwwerr 2011-02-27
  • 打赏
  • 举报
回复
getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.
也就是说如果在这行代码printf("输入第%d个学生的性别:",t+1);执行后输入的字符是'f' '\n',那么第一个字符将被getchar()读出并从缓冲区清除,后边的这行代码scanf("%c",&stu[t].sex);就只能读取到剩下的'\n'(回车符),最后printf只能打印出一个空行。
jernymy 2011-02-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hnuqinhuan 的回复:]

C/C++ code

#include<stdio.h>

struct student
{
char num[10];
char name[10];
char sex;
}stu[2];

void main()
{
int t;
for(t=0;t<2;t++)
{
printf("输入第%d个学生的学号:",t+1);
……
[/Quote]

支持这个
AnYidan 2011-02-27
  • 打赏
  • 举报
回复
在 getchar(); 处设个断点,此后单步执行,看看发生了什么?
Vinton_Wang 2011-02-27
  • 打赏
  • 举报
回复
你的getchar()函数接收到输入的sex内容,所以打印不出来。
delphiwcdj 2011-02-27
  • 打赏
  • 举报
回复
//getchar(); 注释掉
cyywxzd 2011-02-27
  • 打赏
  • 举报
回复
你sex没给数组长度
無_1024 2011-02-27
  • 打赏
  • 举报
回复

#include<stdio.h>

struct student
{
char num[10];
char name[10];
char sex;
}stu[2];

void main()
{
int t;
for(t=0;t<2;t++)
{
printf("输入第%d个学生的学号:",t+1);
gets(stu[t].num);
printf("输入第%d个学生的名字:",t+1);
gets(stu[t].name);
printf("输入第%d个学生的性别:",t+1);
//getchar();
scanf("%c",&stu[t].sex);
fflush(stdin);//清除缓存
}
struct student *p;
p=stu;
for(t=0;t<2;t++)
{
printf("学生的学号:%s\n",stu[t].num);
printf("学生的姓名:%s\n",stu[t].name);
printf("学生的性别:%c\n",stu[t].sex);
printf("\n");
}
printf("\n\n");
for(t=0;t<2;t++)
{
printf("学生的学号:%s\n",(p+t)->num);
printf("学生的姓名:%s\n",(p+t)->name);
printf("学生的性别:%c\n",(p+t)->sex);
printf("\n");
}
}

「已注销」 2011-02-27
  • 打赏
  • 举报
回复
你sex输入出的是汉字?还是字符??、如果是汉字。。那么溢出了。。。char只能放一个字节。。一个汉字是两字节
kevinxin24 2011-02-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 c395565746c 的回复:]

你sex输入出的是汉字?还是字符??、如果是汉字。。那么溢出了。。。char只能放一个字节。。一个汉字是两字节
[/Quote]

谢谢了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧