C语言笔记7

137 阅读1分钟

输入输出缓存区

输出缓存区

  • 输出函数printf putchar
  • 打印字符时程序会先把字符放在输出缓存区 特定时刻一起显示到控制台
    windows使用printf后立即刷新
    Linux程序结束才刷新缓存

输入缓存区

  • 输入函数scanf getchar
  • 输入函数属于阻塞函数 按下\n后 输入的字符进入缓存区 然后输入函数获取缓存区并删除已获取的字符 并解除阻塞状态
  • 输入缓存区仍有数据时getchar不阻塞 会直接打印缓存区剩下的字符
    image.png
    输入了a\n 缓存了a\n c1吸收了a c2直接吸收了缓存区的\n

eg 使用getchar读取输入字符串

#include <stdio.h>
int main()
{
        char str[20];//可存储19个字符
        int i = 0;
        while (i < 20 - 1)
        {
                char c;
                c = getchar();
                str[i++] = c;
                if (c == '\n')
                            break;
        }
        str[i] = '\0';
        printf(str);
        return 0;
}  

不带缓存的输入函数

  • 要包含头文件#include<conio.h>
  • 按下键盘程序就能获取到字符
  • 为区别标准函数与平台函数 getch和getche前面加_

getch函数

  • 相当于无缓存的getcher
  • 按下键后无需回车 程序立刻获取字符 随后通过putchar打印在控制台上
#include <stdio.h>
#include<conio.h>
int main()
{
        while (1)
        {
                char c;
                c = _getch();
                putchar(c);//输入后使用putchar打印在控制台上
                if (c == 'q')
                        break;//输入123q就立刻显示123q并退出程序
        }
        return 0;
}

getche函数

  • 相当于无缓存有回显的getchar
  • 按下键后无需回车 程序立刻获取字符并自动打印在控制台上 无需putchar

应用实例 懒得打了直接截图

image.png

image.png

putchar函数

与getchar对应 putchar就是输出字符
格式为putchar('a');或者 char c=a; putchar(c);
如果是putchar(65) 则根据ASCII码转换 结果为putchar(A)