C语言的输入一直是个棘手的问题,本篇文章让你彻底理解C语言的输入输出基本原理,缓冲区的含义等知识。配合多种输入的案例,一目了然。
零、前期知识
1. “\n”:换行符(newline)。”\r”回车符(return)
2.输入的原理
3. 关于缓冲区的操作
3.1查看缓冲区大小:printf(“%d”,BUFSIZ);
3.2刷新输入缓冲区:fflush(stdin);
3.3刷新输出缓冲区:fflush(stdout);
3.4清空缓冲区\n之前的全部内容:scanf(“%[^\n]”);
3.5丢弃缓冲区中的第一个字符(任意字符):scanf(“%*c”)或scanf(“%c”);
一、C语言关于字符串的输入体系:
1.scanf("%s",str);
格式化输入方式,从缓冲区提取有意义的字符(空格和换行符都不算有意义的字符,因此遇到有意义字符之前的空格和换行符无视。),直至遇到换行符结束。随后,截取其中的第一段有意义的字符作为结果(空格或者换行符分割),其后的输入数据,包括空格换行符,都继续留在缓冲区,待其他的输入函数使用。
案例1:
键盘输入:abc换行符
函数操作:取出abc
缓冲区:换行符
案例2:
键盘输入:空格空格空格abc换行符
函数操作:抛弃三个空格,取出abc
缓冲区:换行符
案例3:
键盘输入:换行符
换行符
换行符
abc换行符
函数操作:抛弃三个换行符,取出abc
缓冲区:换行符
案例4:
键盘输入:abc空格def换行符
函数操作:取出abc
缓冲区:空格def换行符
2.gets(str);
从缓冲区提取有意义的字符(空格也是意义字符),直至换行符结束。无论何时遇换行符即结束。提取后,最后的换行符不留在缓冲区。
案例1:
键盘输入:abc换行符
函数操作:取出abc
缓冲区:无
案例2:
键盘输入:空格空格abc
函数操作:取出空格空格abc
缓冲区:无
案例3:
键盘输入:换行符
函数操作:取出无(注意,不是换行符,而是无任何取出)
缓冲区:无
案例4:
键盘输入:abc空格def
函数操作:取出abc空格def
缓冲区:无
二、C语言关于字符的输入体系:
1.scanf("%c",&c);
标准输入方式,从缓冲区提取一个字符(包括空格,换行符等所有字符)。
案例1:
缓冲区:a换行符
函数操作:取出a
缓冲区:换行符
案例2:
缓冲区:abc换行符
函数操作:取出a
缓冲区:bc换行符
案例3:
缓冲区:换行符
函数操作:取出换行符
缓冲区:无
案例4:
缓冲区:空格换行符
函数操作:取出空格
缓冲区:换行符
2.c = getchar();
从缓冲区提取一个字符(包括空格,换行符等所有字符)。与标准输入一致。
三、数值类型数据(整数为例)的输入机制
采用scanf("%d",&num);
从缓冲区提取整数,直至碰到非数值为止(当然包括换行符,空格等),若第一个碰到的并非数值,则提取无效,停止提取。操作结束后,除提取的数值外,保留缓冲区。
案例1:
缓冲区:123换行符
函数操作:提取出123
缓冲区:换行符
案例2:
缓冲区:123.4换行符
函数操作:提取出123
缓冲区:.4换行符
案例3:
缓冲区:abc换行符
函数操作:无效提取
缓冲区:abc换行符
案例4:
缓冲区:a123换行符
函数操作:无效提取
缓冲区:a123换行符
案例5:
缓冲区:123空格456换行符
函数操作:提取出123
缓冲区:空格456换行符
讲解视频:
【C语言输入输出的终极奥义之1输入输出原理】 https://www.bilibili.com/video/BV1XN4y1F7hc?share_source=copy_web&vd_source=75bceba5d7c6080fbc7cc4f6d257a90f
【C语言输入输出的终极奥义之2字符串输入】 https://www.bilibili.com/video/BV1bt4y1n7ru?share_source=copy_web&vd_source=75bceba5d7c6080fbc7cc4f6d257a90f
【C语言输入输出的终极奥义之3字符输入】 https://www.bilibili.com/video/BV1kg411r7W1?share_source=copy_web&vd_source=75bceba5d7c6080fbc7cc4f6d257a90f
【C语言输入输出的终极奥义之4数值类型输入】 https://www.bilibili.com/video/BV1UG41147N9?share_source=copy_web&vd_source=75bceba5d7c6080fbc7cc4f6d257a90f
可关注B站:猎风工作室崔老师,查看更多C语言讲解视频