今天写malloc开辟失败时,return 0 时,考虑到输入缓冲区中剩余的东西,会影响其他操作(例如压栈)qaq,记录一下内。
1.键盘输入缓冲区
像程序输入时,输入的东西会被存放在存储在内存的输入缓冲区中(也可以叫做输入流)。
例如
# includeint main(void) { int a, b, c; scanf("%d", &a); printf("a = %dn", a); scanf("%d", &b); printf("b = %dn", b); scanf("%d", &c); printf("c = %dn", c); return 0; }
无论你输入1 2 3还是
1
2
3
都不影响结果。
输入缓冲区像队列qaq(我还感觉它的寿命<=main)qaq
2.fflush(stdin)
头文件在stdio.h中,清空输入缓冲区的所有东西(不就清空队列吗qaq).
大佬的话:
fflush 一般用于清除用户前面遗留的垃圾数据,提高代码的健壮性。因为如果是自己编程的话,一般都会按要求输入。但对于用户而言,难免会有一些误操作,多输入了一些其他没有用的字符,如果程序中不对此进行处理的话可能会导致程序瘫痪。所以编程时一定要考虑到各种情况,提高代码的健壮性和容错性。使用 fflush 就可以将用户输入的垃圾数据全部清除。(果然被我想到了qaq)
例如:
#includeint main(){ int num; char flag; while(1){ scanf("%d",&num); printf("num = %dn",num); printf("你还想要吗ntr,Y or Nn"); fflush(stdin); scanf("%c",&flag); if(flag == 'Y'){ printf("果然很想要嘛qaqn"); }else if(flag == 'N'){ break; }else{ printf("捣乱是吧!!!!,奖励你一次OVon"); } } return 0; }
或许为啥不用getchar()捏
比如我这里第一次输入时写了5adfsadsfads
getchar()不彳亍吧(但是也可以后面在说qaq)
3.用while(getchar() != 'n')
因为不管输入多少无用数据,最后只有一下回车,(回车不是回车符,是换行符n)



