hjwwwwww 发表于 2019-2-19 23:06:45

scanf吸收回车符的问题

#include <stdio.h>

int main()
{

jackz007 发表于 2019-2-19 23:06:46

本帖最后由 jackz007 于 2019-2-20 11:49 编辑

      本人的见解与楼主相反,scanf() 并不是吸收,而是拒收了回车符,正因为这样,才会导致本应属于 a 的回车符却被派给了 b1[],本应属于 b1[] 的字符串却被派给了 b2[],b1[] 为空串的结果。

      有了这个见解就好办了,只要在 scanf() 与 fgets() 之间插入一个 fflush(stdin) 指令清空键盘缓冲区便可解决此问题:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
      // 先读入一个整数,再读入2个串
      int a                        ;
      char b1                   ;
      char b2                   ;
      
      scanf("%d" , & a)            ; // 由于 scanf() 拒收回车符,会造成回车符在键盘缓冲区滞留
      fflush(stdin)                  ; // 所以,新增此句,清空键盘缓冲区
      fgets(b1 , sizeof(b1) , stdin) ;
      fgets(b2 , sizeof(b2) , stdin) ;
      printf(" a = %d\n" , a)      ;
      printf("b1 = %s\n" , b1)       ;
      printf("b2 = %s\n" , b2)       ;
               
      return 0                     ;
}


    楼主不妨一试。

hjwwwwww 发表于 2019-2-19 23:09:39

#include <stdio.h>

int main()
{
        // 先读入一个整数,再读入2个串
        int a;
        char b1;
        char b2;
       
        scanf("%d", &a);
        fgets(b1, sizeof(b1), stdin);
        fgets(b2, sizeof(b2), stdin);
       
        printf("a = %d\n", a);
        printf("b1 = %s\n", b1);
        printf("b2 = %s\n", b2);
               
        return 0;
}

灰色的天空 发表于 2019-2-19 23:36:54

额,你在scanf("%d",&a);后面加一句getchar();//把回车换行吸收掉就行了。

前路 发表于 2019-2-20 01:13:49

具体没太懂楼主的意思呀,你想达到什么样的效果呀{:10_269:}
页: [1]
查看完整版本: scanf吸收回车符的问题