请教一个问题,为什么我这个代码在输入到身高之后,直接跳到姓名输入了呢?

yx19911127 2017-10-27 10:48:21
#include<stdio.h>
#include<stdlib.h> //因为要用strcpy函数,所以要包含头文件stdlib.h

struct student //定义一个结构体
{
char name[20]; //姓名
int age; //年龄
char sex; //性别
int height; //身高
};
main()
{
struct student stu[50]; //定义一个结构体,表示有50个学生。
int i=0; //输入学生的计数
int j; //输出的计数
char s; //用户输入数据
char name[20]; //姓名
while(1)
{
printf("Enter a student?\n?Y/N:");//提示用户输入选择
scanf("%c",&s); //用户输入一个字符

if(s=='N'||s=='n') //输入N或者n则终端循环
{
break; //中止当前循环
}
if(s!='n'&&s!='N'&&s!='y'&&s!='Y') //如果不是N、n、y、Y这几个字母则进入下一个循环
{
printf("error.\n"); //输出提示
continue; //进入下一个循环
}

printf("enter age:\n"); //提示输入年龄
scanf("%d",&stu[i].age); //输入年龄
printf("enter height:\n"); //提示输入身高
scanf("%d",&stu[i].height); //输入身高
printf("enter sex:\n"); //提示输入性别
scanf("%c",&stu[i].sex); //输入性别
printf("enter name:\n"); //提示输入姓名
scanf("%s",name); //输入姓名
strcpy(stu[i].name,name); //将字符串复制到姓名
i++; //计数器自加
}
for(j=0;j<i;j++)
{
printf("Student[%d]\n\t",j); //提示第几个学生
printf("Name :%s \n\t",stu[j].name); //输出姓名
printf("Age :%d \n\t",stu[j].age); //输出年龄
printf("Sex :%c \n\t",stu[j].sex); //输出性别
printf("Height :%d \n\t",stu[j].height);//输出身高
}
}
...全文
160 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-10-28
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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