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