getchar() 与缓冲区

上一篇博客中的最后两句是睡前加进去的,就没有进行调试,

printf ("\t\t按Enter键返回\n\t\t");
getchar();

使用getchar()来 使程序暂停运行,但今天发现getchar并没有起到我想要的作用,程序好像都没有走getchar,或者直接跳过了这一句。

主要原因是因为上面的while语句中使用了scanf函数。

scanf函数

C语言中输入函数scanf使用不当,会出现各种错误。

  • 在C语言中空白字符括:空格、换行()、回车()、水平制表符()、换页符( )、垂直制表符()。
  • 在scanf读取的一个参数是数时,开始输入的空白字符会被忽略,读取数字直到遇到第一字符不是数字就会停止;读取字符串时,开始的空白字符也会被忽略掉,读取字符【0-9a-zA-Z…](各种可显示字符),直到遇到不是字符停止匹配,(包括空白字符,通常为回车换行),并且在字符串尾添加空字符,(空字符是字符串输出结束字符).scanf遇到停止字符时,把停止字符还放入键盘字符缓存区中。
  • 当此次输入结束时,不管正确与否,都要刷新缓存区,否则有滞留字符干扰下一次的输入。fflush(stdin);rewind(stdin);都可以清空输入流缓存区。
fflush(stdin); 和 rewind(stdin); 和 fpurpe(stdin);
  • rewind(stdin) 是把文件指针回绕到文件起始处。

  • fflush(stdin) 是把文件输入缓冲区清0。

  • stdin 是标准输入设备(输入流),通常是键盘。(但也可以是通过转向的文本文件。)

  • fpurpe(stdin);函数的作用是清除缓冲区中所有的作用.

缓冲区

  • 缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。
  • 缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。
  • 我们经常要用到标准输入输出流,而ANSI C对stdin、stdout和stderr的缓存特征没有强行的规定,以至于不同的系统可能有不同的stdin、stdout和stderr的缓存特征。目前主要的缓存特征是:stdin和stdout是行缓存;而stderr是无缓存的。
  • 下列情况会引发缓冲区的刷新:
    ①缓冲区满时;
    行缓冲区遇到回车时
    ③关闭文件;
    ④使用特定函数刷新缓冲区。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值