bigcomic 发表于 2021-3-14 11:28:02

新人求助

代码:
#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?我试过去掉任意一个,当执行到这里时就会跳过去,这是为何?请大佬指点迷津,不胜感谢!

jackz007 发表于 2021-3-14 12:35:26

#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) ;
}

bigcomic 发表于 2021-3-14 15:53:52

明白了,多谢!!!

pythonnulixuexi 发表于 2021-3-14 17:30:45

jackz007 发表于 2021-3-14 12:35


这段代码我运行了一下,还是会有跳过的情况,而且不一样的编译器跳过的情况也不一样

jackz007 发表于 2021-3-14 18:11:40

       跳过的唯一可能是在输入性别的时候输入了1个以上的字符,你可以仔细测试一下。
页: [1]
查看完整版本: 新人求助