当前位置: 首页 > news >正文

占位符读取标准输入缓冲区规则

1、如果标准输入缓冲区中的前若干个字符都是空白字符,%s,%d,%f都能直接跳过并且从第一个非空白字符开始读取,但%c不能,而是直接读取。

2、%s遇到空白字符时停止,不会读取遇到的空白字符。

3、%d遇到非数字时停止读取,不会读取使之停止的字符。

4、%f遇到除了首个小数点之外的非数字时停止读取,不会读取使之停止的字符。

5、%c会读取任何字符,包括空白字符,但仅能读取一个任意字符。

6、scanf(“…”)中的字符串叫做格式化字符串,格式化字符串中含有占位符和其他字符,其他字符里有空白字符和普通字符。

7、若占位符未匹配成功,则对应的内存地址会保持原来的值。

8、在 scanf 的格式化字符串中,除占位符外的空白字符(空格、制表符、换行符等)会影响读取过程,但它们的行为和普通字符略有不同:

空白字符的作用和影响

  1. 普通字符匹配

    • 格式化字符串中的普通字符(非占位符、非空白字符)必须与输入缓冲区中的字符严格匹配。
    • 例如:scanf("Name: %s", name);,输入必须包含 "Name: ",然后才是要读取的字符串。
  2. 空白字符的特殊处理

    • 格式化字符串中的空白字符(空格、制表符、换行符等)会匹配输入缓冲区中的任意数量的空白字符(包括零个)。
    • 这意味着,如果格式化字符串中有一个空白字符,scanf 会读取并跳过输入中的任意数量的空白字符。

示例代码

#include <stdio.h>int main() {int num;char str[20];printf("请输入一个整数:");scanf("   %d", &num); // 格式化字符串中的三个空格会被忽略,直接读取整数printf("你输入的整数是:%d\n", num);printf("请输入一个字符串:");scanf(" %s", str); // 格式化字符串中的空格会跳过输入中的所有空白字符printf("你输入的字符串是:%s\n", str);return 0;
}

输出示例

假设用户输入:

   42Hello World

程序输出:

你输入的整数是:42
你输入的字符串是:Hello

关键点总结

  • 格式化字符串中的空白字符会导致 scanf 跳过输入中的任意数量的空白字符。
  • 这种行为允许在格式化字符串中灵活处理输入中的空白字符,而不会影响数据的读取。
  • 但在某些情况下,可能会导致意外行为,例如在需要精确匹配输入格式时,需特别注意空白字符的处理。
  • 其实就是格式化字符串中的空白字符具有跳过标准输入缓冲区中空白字符的功能,就像%s、%d、%f跳过为首的空白字符群一样的的功能,所以这种格式化字符串里的空白字符一般都是和%c配合使用,也就是赋予%c跳过为首的空白字符群的能力。
http://www.xdnf.cn/news/442675.html

相关文章:

  • WEB安全--Java安全--CC1利用链
  • 生成式人工智能认证(GAI认证)官网 - 全国统一认证中文服务平台上线
  • [python] python中的魔法方法和属性
  • 【Python 异常处理】
  • 【c语言内存函数】
  • Kuka AI音乐AI音乐开发「人声伴奏分离」 —— 「Kuka Api系列|中文咬字清晰|AI音乐API」第6篇
  • 梯度优化提示词:模型生成精准回答的秘密
  • libmemcached库api接口讲解四
  • 反向搭理搭建于网络安全的分层关系讨论
  • 计算机网络-MPLS VPN基础概念
  • FlashInfer - 测试的GPU H100 SXM、A100 PCIe、RTX 6000 Ada、RTX 4090
  • 具身智能梳理以及展望
  • React Flow 简介:构建交互式流程图的最佳工具
  • 如何远程执行脚本不留痕迹
  • MCU ESP32-S3+SD NAND(贴片式T卡):智能皮电手环(GSR智能手环)性能与存储的深度评测
  • MoonBit正式入驻GitCode!AI时代的编程语言新星,开启高性能开发新纪元
  • LVS负载均衡群集和keepalive
  • Canvas知识框架
  • CSP信奥赛新增的算法-马拉车算法(Manacher‘s Algorithm)
  • 使用 Semantic Kernel 调用 Qwen-VL 多模态模型
  • YashanDB V23.4 LTS 正式发布|两地三中心、库级闪回重磅特性上线,生产级可用性再升级
  • docker(二)初识 docker
  • Rust入门之高级Trait
  • 机器学习 Day17 朴素贝叶斯算法-----概率论知识
  • 2025视频协作工具全景解析:技术跃迁与场景重构
  • 【Linux网络】认识网络
  • 编译openssl源码
  • 【软件工程】基于数据流和依赖分析
  • 商城小程序源码介绍
  • OpenHarmony系统HDF驱动开发介绍(补充)