带你轻松玩转C语言scanf和getchar

简介: 笔记

getchar()


getchar()返回类型和如何结束

1.png

getchar()是从键盘上接收一个字符,它的返回值为int型,它也可以接收字符型,因为字符型在C语言中是以ASCII码值的形式进行存储的。

2.png

当读取到错误或读到文件结束标志EOF时,getchar()会停止获取字符

3.png


getchar获得一个字符,赋给ch,putchar是将这个字符输出,printf也是将这个字符输出


getchar如何获取字符

4.png

工作原理: 当我们在键盘上输入字符后,按下回车键,此时我们输入的字符会被送到缓存区,由于我们按了回车键,缓存区会自动加入一个\n,即换行符,此时缓存区的内容时输入的字符+换行符,getchar会从缓存区中一个一个把字符往出拿,知道拿光位置,因为最后一个是换行符,当getchar拿完字符之后再拿换行符,此时会进行换行。

5.png

如这样:在ch获得字符后,它会自动换行,就是因为我们使用了回车键,使得它在缓存区中多了一个换行符,所以在ch接收完字符后会自动换行


getchar()如何停止获取字符

当读取到错误或读到文件结束标志EOF时,getchar()会停止获取字符,除过getchar()自动停下,还有一种方法按ctrl+z,有的设备按一次就行,有的需要按好几次

6.png

像这种代码,光标会一直闪烁,就代表程序一直在执行,当我们按下ctrl+z再按回车之后,这个时候光标不再闪烁,说明程序停止执行

7.png

scanf()


scanf()返回类型和如何结束

8.png

返回类型为int型,scanf()返回的值为,正确的获得按格式所输入的字符的个数(一般编译器会将scanf返回值忽略),但是这个不影响我们使用scanf(),scanf()我们拿来从键盘给变量赋值就行,scanf返回成功转换和分配的字段数;返回值不包括已读取但未分配的字段。返回值为0表示未分配任何字段。如果出现错误,或者在首次尝试读取字符时遇到文件结尾字符或字符串结尾字符,则返回值为EOF

9.png



scanf()如何获取字符

10.png

工作原理: 当我们在键盘上输入字符后,按下回车键,此时我们输入的字符会被送到缓存区,由于我们按了回车键,缓存区会自动加入一个\n,即换行符,此时缓存区的内容时输入的字符+换行符,scanf会从缓存区按所要求的格式把字符往出拿,直到拿光为止,因为最后一个是换行符,当scanf()拿完字符之后再拿换行符,此时会进行换行。


用scanf()从键盘上给变量赋值

11.png


这里我们按""里面的格式输入字符就行,这里是%d,所以我们输入整数,由于按了回车键,所以它会进行自动换行


用scanf和getchar设置密码锁

12.png

当我们输入123456之后按下回车,并没有输入Y,此时就显示NO,说明getchar()接受了一个字符不是Y,getcahr()在这里接收的是\n因为我们输入完密码后按了回车键,缓存区自动加了一个\n,而scanf按格式读取只读到了6,之后出现了一个getchar(),getchar()会自动把缓存区里的\n拿走

13.png

为了解决这种情况,我们加一个getcahr()来获取末尾的\n ,此时打印正常


但当输入密码中有空格时候,此时又出现跟前面一样的错误,这是因为scanf()只读走了abcdef读到空格的时候scanf停止读取,而第一个getchar接收到了空格,ret接收到了1,所以会发生错误

15.png

为了避免这种情况,我们稍加修改,加一个while循环,当它读取到的字符是\n时,自动跳出循环

16.png

相关文章
|
4月前
|
C语言
【C语言基础考研向】05 scanf读取标准输入超详解
本文详细解析了C语言中`scanf`函数的工作原理及常见问题。首先介绍了`scanf`如何处理标准输入,并通过示例说明了为何有时会出现阻塞现象及其解决办法。接着探讨了当输入包含多种数据类型时,特别是字符型数据的处理方式,强调了格式控制的重要性,并给出了正确的输入格式示例。通过正确配置,可以避免因空格和换行符导致的问题,确保数据准确读取。
127 10
|
3月前
|
C语言
初识C语言:与计算机的交流之输入与输出(scanf和printf)
初识C语言:与计算机的交流之输入与输出(scanf和printf)
300 0
|
4月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]="hello"`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
129 8
|
4月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
|
5月前
|
存储 缓存 编译器
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(下篇)
scanf处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。 解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。
205 2
|
5月前
|
存储 C语言
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(上篇)
printf 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
102 1
|
5月前
|
存储 安全 编译器
C语言中的scanf函数
C语言中的scanf函数
135 1
|
5月前
|
存储 C语言
【C语言小知识】getchar与putchar
【C语言小知识】getchar与putchar
|
7月前
|
存储 C语言
c语言scanf函数用法
c语言scanf函数用法
|
8月前
|
IDE 测试技术 开发工具