首页 > 其他分享 >scanf函数和占位符%s

scanf函数和占位符%s

时间:2025-01-17 23:00:24浏览次数:3  
标签:字符 函数 scanf 占位 字符串 输入 读取

scanf函数

scanf用于读取用户的键盘输入,程序执行到这个语句时,会停下来,等用户从键盘输入,用户输入数据,按下回车键,scanf()就会处理用户的输入,将其存入变量

scanf()处理用户输入的原理是用户输入的先放入缓存,按回车后按照占位符对缓存进行解读,解读用户输入时会从上一次解读遗留的第一个字符开始,直至读完缓存或者遇到第一个不符合条件的字符

除了%c以外,占位符都会自动忽略起首的空白字符,%c不hi忽略空白字符,总是返回当前单元格字符,无论该字符是否为空格。如果要强制跳过字符前的空白字符,可以写成scanf(“ %c”,&ch) 即在%c前加上一个空格表示跳过零个或多个空白字符

在上面示例中,如果用户输入2024-01-01,就会准确输出年月日

在C语言中, scanf 函数是一个常用的输入函数,它允许程序从标准输入(通常是键盘)读取格式化的数据。当使用 scanf 函数时,有时候我们可能不希望存储某些输入值,这时候就可以使用赋值忽略符 *

2025赋给year,01会被读取但会被忽略,17就会赋给month

占位符%s

占位符不能简单等同于字符串,他的规则是从当前的一个非空白字符开始读,直到遇到空白字符(即空格、换行符、制表符等)为止

因为%s不会包含空白字符,所以无法用来读取多个单词,除非多个%s一起使用,这也意味着,scanf()不适合读取可能包含空格的字符串,比如书名或者歌曲名,另外,scanf()遇到%s占位符,会在字符串变量末尾存储一个空字符\0;

scanf()将字符串读入字符数组时,不会检测字符串是否超过了数组长度,所以储存字符串时很可能会超过数组的边界,为了防止这种情况,使用%s占位符时,应该指定读入字符串的最长长度,即写成%【m】s,其中【m】是一个整数,表示读取字符串的最大长度,后面的字符将被丢弃

如图所示,name是一个长度为11的字符数组,scanf()的占位符%s表示最多读取用户输入的十个字符,后面的字符将被丢弃,这样就不会有溢出的风险了。

如果吧%[m]s放在printf函数中,%10s表示最小宽度是10个字符,如果输出的字符串不够,会在左侧补空格,如果大于了这个10,就啥也不干,原样输出

标签:字符,函数,scanf,占位,字符串,输入,读取
From: https://blog.csdn.net/2401_87402888/article/details/145133651

相关文章

  • 深度学习中的损失函数:从原理到实践
    在深度学习的广袤领域中,损失函数(LossFunction)宛如指引模型训练方向的北极星,其重要性不言而喻。它不仅量化了模型预测与真实值之间的差距,更是优化算法调整模型参数的依据。本文将深入探讨几种常见的损失函数,从原理剖析到实际应用,带你领略它们在深度学习中的独特魅力。一、IoUL......
  • 关于函数(20250117)
    补充递归调用的补充:无限制的递归调用不会产生死循环,而是在栈区空间中,被调函数“入栈(保护现场)”产生的返回值地址占满整个栈区空间,程序直接崩溃。数组作为参数传递,传递的是数组的首元素地址。字符串数组的末尾存在‘\0’,因此字符串数组作为函数参数时,不需要元素个数作为函数参......
  • 密码学——密码学基础、散列函数与数字签名
    1.密码学概述是信息安全的基础和核心,是防范各种安全威胁的重要手段,信息安全的许多相关知识都与密码学相关。密码学发展密码学是一门古老而又年轻的学科,几千年以前就存在,至今仍在发展演进。地位非常重要甚至起决定性作用。密码学源于希腊语kryptós,意为“隐藏的”。最早的......
  • JS — 对象、数组、函数
    对象英文名称:Object。类似于C++中的map,python中的字典,由key:value对构成。value可以是变量、数组、对象、函数等。函数定义中的this用来引用该函数的“拥有者”。例如:test.js中的内容为:letperson={//定义一个对象personname:'kitty',//对象的元......
  • Java初学者笔记-03、代码块内部类函数式编程
    代码块静态代码块static{}类加载时自动执行,类只会加载一次,静态代码块只会执行一次,往往用来对类的静态资源的初始化。实例代码块{},每次创建对象时执行,用来完成对象的初始化的。内部类一个类定义在另一个类内部,叫做内部类。使用场景:当一个类的内部,包含了一个完整的事物,且......
  • linux m、mm、mmm函数和make的区别
    在Linux内核开发和Android开发中,构建系统通常使用 make 命令来编译和构建项目。而在Android开发环境中,还有 m、mm 和 mmm 等命令,这些命令是Android构建系统的一部分,提供了更高效和便捷的构建方式。以下将详细介绍这些命令的功能、使用场景和区别。一、make 命令......
  • Java初学者笔记-03、代码块内部类函数式编程
    代码块静态代码块static{}类加载时自动执行,类只会加载一次,静态代码块只会执行一次,往往用来对类的静态资源的初始化。实例代码块{},每次创建对象时执行,用来完成对象的初始化的。内部类一个类定义在另一个类内部,叫做内部类。使用场景:当一个类的内部,包含了一个完整的事物,且......
  • LossVal:一种集成于损失函数的高效数据价值评估方法
    在机器学习领域,训练数据的价值并非均等:部分训练数据点对模型训练的影响显著高于其他数据点。评估单个数据点的影响程度通常需要反复重训练模型,计算效率低下。LossVal提出了一种创新方法,通过将数据价值评估过程直接集成到神经网络的损失函数中,实现了高效的数据价值评估。现代机器......
  • java 函数式编程
    1函数式创建对象new接口或抽象类时在花括号里面补全缺失的函数体可以创建匿名子类对象(非子类匿名对象)new普通类时在花括号里面直接重写方法可以创建匿名子类对象(非子类匿名对象)2lumbda表达式创建对象在函数式创建对象的基础上当接口或抽象类中仅有一个方法缺少函数体时可以......
  • QObject::moveToThread成员函数
    头文件包含......