尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

加餐 - 详解 scanf函数

加餐 - 详解 scanf函数 一. 重点 当我们有了变量我们需要给变量输入值就可以使用scanf函数如果需要将变量的值输出在屏幕上的时候可以使用printf函数。例如↓#includestdio.hintmain(){intscore0;scanf(%d,score);// 取地址操作符printf(成绩是%d\n,score);return0;}二. 基本用法① scanf() 函数用于读取用户的键盘输入信息。② 程序运行到这个语句时会停下来等待用户从键盘输入。③ 用户输入数据、按下回车键后scanf() 就会处理用户的输入将其存入变量。④ 它的原理定义在头文件 stdio.h 。standard input output 标准输入输出⑤ scanf() 的语法跟 printf() 类似。⚠️注意变量前面必须加上 运算符指针变量除外因为 scanf() 传递的不是值而是地址即将变量的地址指向用户输入的值。 scanf() 处理数值占位符时会自动过滤空白字符包括 空格、制表符、换行符 等。 所以用户输入的数据之间。有一个或多个空格不影响 scanf() 解读数据。另外用户使用回车键将输入分成几行也不影响解读。例如↓重点① scanf() 处理用户输入的原理是用户的输入先放入缓存等到按下回车键后按照占位符对缓存进行解决。缓存就是编译器运行时弹出的结果窗口② 解读用户输入时会从上一次解读遗留的第一个字符开始直到读完缓存或者遇到下一个不符合条件的字符为止。例如↓三. scanf 的返回值① scanf() 的返回值是一个整数表示成功读取的变量个数。② 如果没有读取任何项或者匹配失败则返回零。③ 如果在成功读取任何数据前发生了读取错误或者遇到读取到文件结尾则返回常量EOF(-1) 。 EOF 就是 end file 文件结束标志例如↓#includestdio.hintmain(){inta0;intb0;floatf0.0f;//主播有时候忘记加上 f ,这是不良习惯我检讨大家别学我intrscanf(%d%d%f,a,b,f);//10 12 1.53printf(%d,%d,%.1f\n,a,b,f);// 10,12,1.5printf(%d\n,r);//3return0;//在VS环境中按三次 CtrlZ 发生了读取错误。三次CtrlZ就是EOF}拓展#includestdio.hintmain(){inta0,b0;while(scanf(%d%d,a,b)2)//到后面会有while循环讲解贝贝们别着急让我们一步一个脚印//想要它结束必须多输入一个数值让它的变量个数加1//scanf() ! EOF 也可以两者皆可不结束就循环暴力加{intcab;printf(%d\n,c);}return0;}四. 占位符scanf() 常用的占位符如下与printf() 的占位符基本一致。⭐ %c :字符。⭐ %d :整数。⭐ %f :float类型 浮点数。⭐ %lf :double类型 浮点数。⭐ %[ ] 在方括号在指定一组匹配的字符比如 %[0-9] 遇到不在集合之中的字符匹配将会停止。例如↓#includestdio.hintmain(){chararr[10]{0};scanf(%[a-z],arr);//abcd##wwwprintf(%s\n,arr);//abcdreturn0;}⚠️ 上面的占位符之中除了 %c 以外都会忽略起首的空白字符。 %c 不忽略空白字符总是返回当前第一个字符无论该字符是否为空格。⚠️ 如果想要强制跳过空格前的空白字符可以写成 scanf( %c,a) ,%前加一个空格表示跳过零个或多个空白字符。#includestdio.hintmain(){chara0;// %s不一样它可以自动跳过起首的空白字符遇到非空白字符结束也就是说 %c 最最特殊scanf( %c,a);printf(%c,a);return0;}重点 %s特别说一下占位符 %s ,它其实不能简单地等同于字符串。它的规则是从当前第一个非空白字符开始读起直到遇到空白字符即 空格、换行符、制表符为止。例子↓#includestdio.hintmain(){charch[10]{0};scanf(%s,ch);// ab cdprintf(%s,ch);//abreturn0;}⚠️ 因为 %s 不会包含空白字符所以无法用来读取多个单词除非多个 %s 一起使用。这也意味着scanf()不适合读取可能包含空格的字符串比如书名或歌曲名。另外scanf() 遇到 %s 占位符会在字符串变量末尾存储一个空字符 ‘\0’ 。⚠️ 使用 %s 占位符时应该指定读入字符串的最大长度即写成%[m]s其中的[m] 是一个整数表示读取字符串的最大长度后面的字符将被丢弃。例子↓#includestdio.hintmain(){charch[20]{0};scanf(%5s,ch);//abcdefprintf(%s,ch);//abcdereturn0;} 带空格字符串如何被读取输入时写成→ %[^\n]五. 赋值忽略符有时用户的输入可能不符合预定的格式。所以我们用更高效的办法来解决问题 ❓ ↓%*c 就是代表任意制表符或者空格当然%*d 照样可以他们共通的用处是跳过本字符然后录下一个。只要带%*就给我跳过⚠️ 这就是 scanf() 提供的一个赋值忽略符assignment suppression character* 。只要把 * 加在任何占位符的 % 后面该占位符就不会返回值解析后将被丢弃。
返回列表