C语言易错知识点:scanf函数

scanf在C语言学习中比较常用,但因为其涉及屏幕缓冲区导致有的时候会调入陷阱,下面分享一下常见的需要注意的事项:

1.输入末尾带有回车'\n'

当我们输入数据后,最后按下回车时,屏幕缓冲区的末尾都会含有这个字符

scanf的返回值是成功读取的变量个数,正常情况下这个数量等于占位符的数量

2.读取时的匹配规则

scanf会根据占位符的类型到缓冲区去取相应的数据,其中%c什么都能取,包括空格等符号

如果在%c前加了空格,就会跳过这些空格读取第一个字符

其中因为%c前面没有空格,所以a把空格读走了,引发后续错误

%s跳过空格开始读,遇到空格停止,这里很容易被坑。要读取空格,建议使用gets

当读到占位符不匹配的类型时会自动停止读取,由下一个继续

如果当前匹配不成功,会直接中断读取,后续的占位符不会起到作用

3.回车换行是'\n',回车不换行是'\r'

我们输入数据后敲的回车都是\n,相当于光标换行并回到起始位置,而\r只是回到起始位置,如果进行后续操作,会进行覆盖

4.返回值EOF和0的区别

EOF特指读取错误(不好验证)和文件末尾,一般在读取文件时用它来判定

在控制台中,如果用EOF来作为循环条件的话,那么程序会被卡住,因为scanf会一直等我们输入,这个时候用0作为返回值的循环条件更好,因为下一个循环如果读不到想要的值,scanf的返回值就是0,这个时候循环就结束了。

在循环读取时,scanf会跳过每次按的\n(回车),所以这里不会因为\n不匹配%d而中断

5.用getchar清空缓冲区

用getchar写一个循环,可以帮助我们清除\n,防止后续程序出错

这里看到,不清空的话,%c会直接读走\n

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 13:04:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 13:04:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 13:04:02       87 阅读
  4. Python语言-面向对象

    2024-03-14 13:04:02       96 阅读

热门阅读

  1. 字符串和字节的使用

    2024-03-14 13:04:02       39 阅读
  2. redis中setnx命令的底层原理是什么

    2024-03-14 13:04:02       34 阅读
  3. MyBatis-Plus IgnoreStrategy:深入解析与策略应用

    2024-03-14 13:04:02       40 阅读
  4. ES6基础1

    2024-03-14 13:04:02       38 阅读
  5. 单元测试框架unittest D16

    2024-03-14 13:04:02       40 阅读
  6. 聊聊js数据结构

    2024-03-14 13:04:02       34 阅读
  7. Docker之自定义镜像上传阿里云

    2024-03-14 13:04:02       38 阅读
  8. 蓝桥杯2023年-岛屿个数(dfs,染色法)

    2024-03-14 13:04:02       38 阅读
  9. Python | Class生成器

    2024-03-14 13:04:02       34 阅读
  10. 贪心算法概念

    2024-03-14 13:04:02       39 阅读