为什么第二个开始的scanf语句被跳过了!求高手帮帮忙!

时间:2023-01-07 11:24:41
这段代码为什么第二个scanf语句直接被跳过了!
求高手帮帮忙!!
# include<stdio.h>
main()
{
char a,b,c;
printf("Do you have Experience with C? Press y/n!\n");
scanf("%c",&a);
switch(a)
{
default :printf("Input error!!!");break;
case 'n': case 'N':printf("We are so sorry to tell you ...");break;
case 'y': case 'Y':
{
printf("Do you have bachelor degree?Press y/n!\n");
scanf("%c",b)
switch(b)
{
default :printf("Input error!!!");break;
case 'n': case 'N':printf("We are so sorry to tell you ...");break;
case 'y': case 'Y':
{
printf("Less than 30?Press y/n!\n");
scanf("%c",&c);
switch(c)
{
default :printf("Input error!!!");break;
case 'n': case 'N':printf("We are so sorry
  to tell 
  you ...");break;
case 'y': case 'Y':printf("Welcome to join
  us!\n");
}
}
}
}
}
}

9 个解决方案

#1




'\n' ;

fflush(stdin);

#2


scanf()和getchar()函数是从输入流缓冲区 中读取值的,而并非从键盘(也就是终端)缓冲区读取。而读取时遇到回车(\n)而结束的,这个\n会一起读入输入流缓冲区的,所以第一次接受输入时取走字 符后会留下字符\n,这样第二次的读入函数直接从缓冲区中把\n取走了,显然读取成功了,所以不会再从终端读取!因此后面只要加上fflush(stdin)函数释放缓冲区数据就可以了.

解决办法:可以在scanf()函数之 后加个fflush(stdin);,还有加getch(); getchar();也可以,

#3


排版啊!

# include<stdio.h>
main()
{
char a,b,c;
printf("Do you have Experience with C? Press y/n!\n");
scanf("%c",&a);
switch(a)
{
   case 'n': case 'N':printf("We are so sorry to tell you ...");break;
   case 'y': case 'Y':
     {
        printf("Do you have bachelor degree?Press y/n!\n");
        fflush(stdin);
        scanf("%c",&b);
        switch(b)
          {
             case 'n': case 'N':printf("We are so sorry to tell you ...");break;
             case 'y': case 'Y':
                {
                  printf("Less than 30?Press y/n!\n");
                  fflush(stdin);
                  scanf("%c",&c);
                  switch(c)
                    {
                       case 'n': case 'N':printf("We are so sorry to tell you ...");break;
                       case 'y': case 'Y':printf("Welcome to join us!\n"); break;
                       default :printf("Input error!!!");break;
                    }                     
                } break;
              default :printf("Input error!!!");break;
          }
     } break;
     default :printf("Input error!!!");break;
}
}

#4


知道了!谢各位了哈!

#5


 scanf("%c",&b);

#6


给最后面加个getchar();就解决问题因为这样需要从键盘输入空格才结束

#7


这是scanf函数的bug,在%c前面加上%*应该可以的

#8


在第二个scanf()之前价格fflush(stdin)

#9


在scanf(" %c",**) 在%c前面加一个空格是最有效的 排除垃圾的方法

#1




'\n' ;

fflush(stdin);

#2


scanf()和getchar()函数是从输入流缓冲区 中读取值的,而并非从键盘(也就是终端)缓冲区读取。而读取时遇到回车(\n)而结束的,这个\n会一起读入输入流缓冲区的,所以第一次接受输入时取走字 符后会留下字符\n,这样第二次的读入函数直接从缓冲区中把\n取走了,显然读取成功了,所以不会再从终端读取!因此后面只要加上fflush(stdin)函数释放缓冲区数据就可以了.

解决办法:可以在scanf()函数之 后加个fflush(stdin);,还有加getch(); getchar();也可以,

#3


排版啊!

# include<stdio.h>
main()
{
char a,b,c;
printf("Do you have Experience with C? Press y/n!\n");
scanf("%c",&a);
switch(a)
{
   case 'n': case 'N':printf("We are so sorry to tell you ...");break;
   case 'y': case 'Y':
     {
        printf("Do you have bachelor degree?Press y/n!\n");
        fflush(stdin);
        scanf("%c",&b);
        switch(b)
          {
             case 'n': case 'N':printf("We are so sorry to tell you ...");break;
             case 'y': case 'Y':
                {
                  printf("Less than 30?Press y/n!\n");
                  fflush(stdin);
                  scanf("%c",&c);
                  switch(c)
                    {
                       case 'n': case 'N':printf("We are so sorry to tell you ...");break;
                       case 'y': case 'Y':printf("Welcome to join us!\n"); break;
                       default :printf("Input error!!!");break;
                    }                     
                } break;
              default :printf("Input error!!!");break;
          }
     } break;
     default :printf("Input error!!!");break;
}
}

#4


知道了!谢各位了哈!

#5


 scanf("%c",&b);

#6


给最后面加个getchar();就解决问题因为这样需要从键盘输入空格才结束

#7


这是scanf函数的bug,在%c前面加上%*应该可以的

#8


在第二个scanf()之前价格fflush(stdin)

#9


在scanf(" %c",**) 在%c前面加一个空格是最有效的 排除垃圾的方法