zoukankan      html  css  js  c++  java
  • scanf这句时,系统并不是等待用户输入

    #include <stdio.h>
    #define BUG puts("here");
    int main() {
    	setbuf(stdin, NULL);
    	char a, b;
    	while (scanf("%c%c", &a, &b) == 2) {
    		printf("%c
    ", a);
    		BUG
    		printf("%c
    ", b);
    		setbuf(stdin, NULL);
    	}
    	return 0;
    }

    当我们的pc指向scanf这句时,系统并不是等待用户输入,而是判断输入缓冲区有没有符合格式的内容,如果有,则直接读取。

    知道了这个,我就应该明白,scanf("%c",&ch);不是没有读到数据,而是读到了我们不知道的数据。

    那问题又来了,它读到了什么??好吧,这就要说到行缓存;

    我们用scanf()的时候都要按下enter键,那enter键按了之后去哪儿了??

    好吧,问题基本应该知道了,enter键也进入了输入缓存区,也就是scanf("%c",&ch);

    读到了' ';

    解决办法,很简单,既然缓存区有东西,那我们就清空它呗~~

    setbuf(stdin,NULL);(这个windows和linux下都可以)

    fflush(stdin);(这个只能windows);


  • 相关阅读:
    数与bit
    ARM汇编优化1
    一 *(a+1)与*(&a+1)
    二 *(a+1)多维数组
    三 二维数组取址
    四 sizeof(a)
    永恒之蓝及WannaCry分析
    github使用记录
    三种页面置换算法的C++模拟
    opencv检测图像直线
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786592.html
Copyright © 2011-2022 走看看