鱼C论坛

 找回密码
 立即注册
查看: 3503|回复: 3

有一个 scanf("%c",&boy1.sex)跳过不运行。

 关闭 [复制链接]
发表于 2011-6-15 13:44:32 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 xurui71 于 2011-6-17 10:15 编辑

#include <stdio.h>
void main()
{
struct date
{
    int month;//月
    int day;//日
    int year;//年
};
struct //申明结构体,学生包括 学号,名字,性别,生日,分数。然后输出。
{
    int num;//学号
    char name[20];//名字
    char sex;//性别
    struct date birthday;//生日
    float score;//分数
}boy1;
printf("the student number:");
scanf("%d",&boy1.num);//输入学号
printf("the name of the student:");
scanf("%s",&boy1.name);//输入名字
printf("M or L?:");
scanf("%c",&boy1.sex);//输入性别(为什么就是这个输入,运行后被跳过?)
printf("please input birthday(yy:)");
scanf("%d",&boy1.birthday.year);//输入出生年
printf("please input birthday(mm:)");
scanf("%d",&boy1.birthday.month);//月
printf("please input birthday(dd:)");
scanf("%d",&boy1.birthday.day);//日
printf("please input the score:");
scanf("%f",&boy1.score);//分数
printf("boy1 is:%d,%s,%c,%d-%d-%d,%5.2f\n",boy1.num,boy1.name,boy1.sex,boy1.birthday.year,boy1.birthday.month,boy1.birthday.day,boy1.score);
}//是不是编译器vc++6.0和谐处理了,出现sex就跳过。

                               
登录/注册后可看大图

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-15 14:34:56 | 显示全部楼层
scanf("%c",&boy1.sex);//输入性别(为什么就是这个输入,运行后被跳过?)

把他给成
scanf("%s",&boy1.sex);
或者在 scanf()后面加上getchar(), 看你自己的情况而定,在那个scanf后面加了。

因为每次按 回车 ,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-15 23:52:33 | 显示全部楼层
C语言里我们经常使用输入函数scanf()等来获得字符输入,但回车这个字符很特殊,它实际上包含两个字符,这就导致:我们要求输入两个字符时,先输入一个字符,回车,再输入一个字符,那么,第二个scanf()获得的实际上是回车的第二个字符。因此,在scanf()之前,要用fflush(stdin);清除一下缓冲区,把回车的第二个字符清除掉。

建议 在每条输入函数后面(例如。scanf()或gets()等等) 后面加入  清除流语句

fflush(stdin);

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-27 13:10:11 | 显示全部楼层
感谢大家分享知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-28 04:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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