新人求助
代码:#include <stdo.h>
#define NAMESIZE 20
struct std{
char name;
int age;
char sex;
}s;
int main(void){
int i;
printf("请输入四名学生的姓名、性别、年龄:\n");
for(i=0;i<4;i++){
printf("姓名:\n");
scanf("%s",&s.name);
printf("性别:\n");
getchar();
scanf("%c",&s.sex);
printf("年龄:\n");
scanf("%d",&s.age);
}
for(i=0;i<4;i++){
printf("%s\t%d\t%c\n",s.name,s.age,s.sex);
return 0;
}
代码可以正常编译执行,结果也符合预期,但有个疑问:输入性别的功能,为什么要同时使用getchar()和scanf?我试过去掉任意一个,当执行到这里时就会跳过去,这是为何?请大佬指点迷津,不胜感谢! #include <stdio.h> // 【修改】文件名写错了
#define NAMESIZE 20
struct student{ // 【修改】std 是 C++ 保留字
char name;
int age ;
char sex ;
} s ;
int main(void){
int i ;
printf("请输入四名学生的姓名、性别、年龄:\n") ;
for(i = 0 ; i < 4 ; i ++){
printf("\n") ;
printf("姓名:") ;
scanf("%s" , s . name) ; // 【修改】,s . name 本身就是地址
printf("性别:") ;
fflush(stdin) ; // 【修改】,读取单个字符前,清除键盘缓冲区
scanf("%c" , & s . sex) ;
printf("年龄:") ;
scanf("%d" , & s . age) ;
}
for(i = 0 ; i < 4 ; i ++) printf("%s\t%d\t%c\n",s.name,s.age,s.sex) ;
} 明白了,多谢!!! jackz007 发表于 2021-3-14 12:35
这段代码我运行了一下,还是会有跳过的情况,而且不一样的编译器跳过的情况也不一样 跳过的唯一可能是在输入性别的时候输入了1个以上的字符,你可以仔细测试一下。
页:
[1]