scanf吸收回车符的问题
#include <stdio.h>int main()
{
本帖最后由 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 ;
}
楼主不妨一试。 #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;
} 额,你在scanf("%d",&a);后面加一句getchar();//把回车换行吸收掉就行了。 具体没太懂楼主的意思呀,你想达到什么样的效果呀{:10_269:}
页:
[1]