欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 占位符读取标准输入缓冲区规则

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

2025/5/15 9:30:02 来源:https://blog.csdn.net/m0_61968622/article/details/147964358  浏览:    关键词:占位符读取标准输入缓冲区规则

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跳过为首的空白字符群的能力。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词