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

最牛的html5网站建设wordpress hashone

最牛的html5网站建设,wordpress hashone,网站群建设指南,前端开发工具哪个好本节介绍输入函数 scanf 的用法。scanf 和 printf 一样#xff0c;非常重要#xff0c;而且用得非常多#xff0c;所以一定要掌握。 概述 scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。该函数的原型为#xff1a; # include stdio.h int scanf(… 本节介绍输入函数 scanf 的用法。scanf 和 printf 一样非常重要而且用得非常多所以一定要掌握。 概述 scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。该函数的原型为 # include stdio.h int scanf(const char *format, ...); 它有两种用法或者说有两种格式。 1) scanf(输入控制符, 输入参数); 功能将从键盘输入的字符转化为“输入控制符”所规定格式的数据然后存入以输入参数的值为地址的变量中。 下面给大家举个例子 #include stdio.hint main(void){int i;i 10;printf(i %d\n, i);return 0;} 我们前面都是像这样写的即直接给变量 i 赋一个值。但是这样写功能比较弱因为这个值就变成一个“死值”了它只能是 10不可能是其他值除非在程序中修改。很多时候我们希望这个值不是由程序员在程序中指定的而是在程序运行的过程中由用户从键盘输入的。用户输入多少变量i就是多少这样程序的功能就更加灵活了。 那么如何实现在程序运行的过程中由用户从键盘输出值呢用 scanf 即可实现 # include stdio.hint main(void){int i;scanf(%d, i); //i 表示变量 i 的地址是取地址符printf(i %d\n, i);return 0;} “输入控制符”和“输出控制符”是一模一样的。比如一个整型数据通过 printf 输出时用%d输出通过 scanf 输入时同样是用%d。 要想将程序中的 scanf 行弄明白首先要清楚的是我们从键盘输入的全部都是字符。比如从键盘输入 123它表示的并不是数字 123而是字符 1、字符 2 和字符 3。这是为什么呢 操作系统内核就是这样运作的。操作系统在接收键盘数据时都将它当成字符来接收的。这时就需要用“输入控制符”将它转化一下。%d的含义就是要将从键盘输入的这些合法的字符转化成一个十进制数字。经过 %d 转化完之后字符 123 就是数字 123 了。 第二个要弄清楚的是是一个取地址运算符后面加变量名表示“该变量的地址”所以i就表示变量 i 的地址。i又称为“取地址i”就相当于将数据存入以变量 i 的地址为地址的变量中。 那么以变量 i 的地址为地址的变量是哪个变量呢就是变量 i。所以程序中 scanf 的结果就把值 123 放到变量i中。 综上所述scanf 语句的意思就是从键盘上输入字符 123然后%d将这三个字符转化成十进制数 123最后通过“取地址 i”找到变量 i 的地址再将数字 123 放到以变量 i 的地址为地址的变量中即变量 i 中所以最终的输出结果就是i123。 注意为什么不直接说“放到变量i中”而是说“放到以变量 i 的地址为地址的变量中”因为这么说虽然很绕口但是能加强对 i 的理解这么说更能表达 i 的本质和内涵。很多人在学习 scanf 的时候经常将“变量 i”和“变量 i 的地址”混淆从而思维开始混乱等深刻了解 i 的含义之后就可以不那么说了。 以上是 scanf 的最简单用法也是最常用、最基本、最重要的用法。这样通过 scanf 就可以在程序运行的过程中由用户来指定变量 i 的值这与在程序中赋值相比较功能更强大。 2) scanf(输入控制符非输入控制符, 输入参数); 这种用法几乎是不用的也建议你们永远都不要用。但是经常有人问为什么 printf 中可以有“非输出控制符”而 scanf 中就不可以有“非输入控制符”。事实上不是不可以有而是没有必要下面来看一个程序 # include stdio.hint main(void){int i;scanf(i %d, i);printf(i %d\n, i);return 0;} 在 printf 中所有的“非输出控制符”都要原样输出。同样在 scanf 中所有的“非输入控制符”都要原样输入。所以在输入的时候i必须要原样输入。比如要从键盘给变量 i 赋值 123那么必须要输入i123才正确少一个都不行否则就是错误。 所以 scanf 中%d后面也没有必要加\n因为在 scanf 中\n不起换行的作用。它不但什么作用都没有你还要原样将它输入一遍。 所以在 scanf 的使用中一定要记住双引号内永远都不要加“非输入控制符”。除了“输入控制符”之外什么都不要加否则就是自找麻烦。而且对于用户而言肯定是输入越简单越好。 一次给多个变量赋值 # include stdio.hint main(void){int i, j;scanf(%d%d, i, j);printf(i %d, j %d\n, i, j);return 0;} 首先scanf 中双引号内除了“输入控制符”之外不要加任何“非输入控制符”。通过键盘给多个变量赋值与给一个变量赋值其实是一样的。比如给两个变量赋值就写两个 %d然后“输入参数”中对应写上两个“取地址变量”给三个变量赋值就写三个 %d然后“输入参数”中对应写上三个“取地址变量”…… 但是需要注意的是虽然 scanf 中没有加任何“非输入控制符”但是从键盘输入数据时给多个变量赋的值之间一定要用空格、回车或者 Tab 键隔开用以区分是给不同变量赋的值。而且空格、回车或 Tab 键的数量不限只要有就行。一般都使用一个空格。 此外强调一点当用 scanf 从键盘给多个变量赋值时scanf 中双引号内多个“输入控制符”之间千万不要加逗号,。 有些人觉得在输入的时候可以用逗号分隔所以就在“输入控制符”之间用逗号隔开。这样做从程序的角度确实是可以的但是建议大家不要这样做。在实际编程中这种写法是绝对不允许的原因有两个 首先逗号要原样输入的有几个就要输入几个少一个或多一个都不行其次也是最主要的原因就是输入法的问题在 scanf 中是在英文输入法下写的逗号那么输入的时候如果是中文输入法下的逗号那也是错的。所以用逗号很容易出错。 最后再次强调scanf“输入参数”的取地址符千万不要忘了。这是初学者经常犯的错误。而 printf 中的“输出参数”是不带取地址符的不要混淆了。 使用scanf的注意事项 1) 参数的个数一定要对应 在前面介绍 printf 时说过“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。这句话同样对 scanf 有效即“输入控制符”和“输入参数”无论在“顺序上”还是在“个数上”一定要一一对应。比如 # include stdio.hint main(void){char ch;int i;scanf(%c%d, ch);printf(ch %c, i %d\n, ch, i);return 0;} 在 VC 6.0 中的输出结果是 a 6 ch a, i -858993460 这种错误是初学者经常犯的由于粗心大意少写一个参数。更严重的是这种错误在编译的时候不会报错。printf 也是一样即使“输出参数”少写了也不会报错但从程序的功能上讲这么写就是错的。所以在编程的时候一定要避免这种错误的发生。 程序中为什么 i–858993460这个在《为什么要初始化变量》中讲过当变量没有初始化的时候就会输出这个值。 在后面会讲到 scanf 是缓冲输入的也就是说从键盘输入的数据都会先存放在内存中的一个缓冲区。只有按回车键后 scanf 才会进入这个缓冲区和取数据所取数据的个数取决于 scanf 中“输入参数”的个数。所以上述程序中 scanf 只有一个输入参数因此按回车键后 scanf 只会取一个数据。所以变量 ch 有数据而变量 i 没有数据没有数据就是没有初始化输出就是 –858993460。 2) 输入的数据类型一定要与所需要的数据类型一致 在 printf 中“输出控制符”的类型可以与数据的类型不一致如 # include stdio.hint main(void){int i 97;printf(i %c\n, i);return 0;} 在 VC 6.0 中的输出结果是 i a 但是在 scanf 中对于从键盘输入的数据的类型、scanf 中“输入控制符”的类型、变量所定义的类型这三个类型一定要一致否则就是错的。虽然编译的时候不会报错但从程序功能的角度讲就是错的则无法实现我们需要的功能。比如 # include stdio.hint main(void){int i;scanf(%d, i);printf(i %d\n, i);return 0;} 在 VC 6.0 中的输出结果是 a i -858993460 输出 –858993460 表示变量未初始化。为什么输入 a变量 i 却显示未初始化呢 在 scanf 中从键盘输入的一切数据不管是数字、字母还是空格、回车、Tab 等字符都会被当作数据存入缓冲区。存储的顺序是先输入的排前面后输入的依次往后排。按回车键的时候 scanf 开始进入缓冲区取数据从前往后依次取。 但 scanf 中 %d 只识别“十进制整数”。对 %d 而言空格、回车、Tab 键都是区分数据与数据的分隔符。当 scanf 进入缓冲区中取数据的时候如果 %d 遇到空格、回车、Tab 键那么它并不取用而是跳过继续往后取后面的数据直到取到“十进制整数”为止。对于被跳过和取出的数据系统会将它从缓冲区中释放掉。未被跳过或取出的数据系统会将它一直放在缓冲区中直到下一个 scanf 来获取。 但是如果 %d 遇到字母那么它不会跳过也不会取用而是直接从缓冲区跳出。所以上面这个程序虽然 scanf 进入缓冲区了但用户输入的是字母 a所以它什么都没取到就出来了而变量 i 没有值即未初始化所以输出就是 –858993460。 但如果将 %d 换成 %c那么任何数据都会被当作一个字符不管是数字还是空格、回车、Tab 键它都会取回。 不但如此前面讲过你从键盘输入 123这个不是数字 123而是字符 1、字符 2 和字符 3它们依次排列在缓冲区中。因为每个字符变量 char 只能放一个字符。所以输入“123”之后按回车scanf 开始进入缓冲区按照次序先取字符 1如果还要取就再取字符 2以此类推。 如果都取完了还有 scanf 要取数据那么用户就需要再输入。先写一个程序看一下 # include stdio.hint main(void){char i, j, k;scanf(%c%c%c, i, j, k);printf(i %c, j %c, k %c\n, i, j, k);return 0;} 在 VC 6.0 中的输出结果是 123 i 1, j 2, k 3 从这个程序中我们看出就单纯地输入 123不加任何空格按回车键之后就同我们所讲的一样分别将字符 1、字符 2 和字符 3 赋给字符变量 i、j 和 k。 但是需要提醒大家注意的是在之前程序中因为 scanf 是 %d所以 a 没有被取出来还在缓冲区中。当遇到下一个 scanf 是 %c 时它就会被取出来。但是如果一直没有出现 %c那么这时就会出现一个问题scanf怎么取十进制整数即使使用 %d但是由于字符 a “挡”在最前面scanf 进去先碰到的总是 a也就无法取到它后面的整数所以必须先将 a“弄走”。这就牵涉到“清空输入缓冲区”的概念这个稍后再讲。 3) 在使用 scanf 之前使用 printf 提示输入 大家想一想前面写的 scanf 程序有没有不足的地方 程序写好之后编译、链接、执行然后弹出黑窗口出现一个光标在那不停地闪。对于编写程序的人来说他知道要输入什么但是对于用户而言用户怎么知道是什么意思呢所以之前的程序都缺少提示信息因此在使用scanf之前最好先用printf提示用户以什么样的方式输入这样可以大大提高代码的质量。看看下面这个程序 # include stdio.hint main(void){int i, j;printf(请输入两个值中间以空格分隔);scanf(%d%d, i, j);printf(i %d, j %d\n, i, j);return 0;} 这样在执行的时候用户一看就知道是要输入两个值然后中间用空格隔开。所以这样写就更人性化、智能化了。 小结 scanf 的使用看似细节繁杂但使用起来非常简单。就目前而言只要掌握以下五点 在 scanf 的“输入参数”中变量前面的取地址符不要忘记。scanf 中双引号内除了“输入控制符”外什么都不要写。“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。“输入控制符”的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类型数据是用户输入的程序员是无法决定的所以在写程序时要考虑容错处理这个稍后再讲。使用 scanf 之前先用 printf 提示输入。 只要掌握了以上五点scanf 的使用基本上就没什么问题了。至于其他注意点到后面讲数组和指针的时候再介绍。
http://www.huolong8.cn/news/399232/

相关文章:

  • 网站建设方案及报wordpress二维码动态图片大小
  • 唐山网站建设价格wordpress评论后不显示
  • 建设网站需要多少费用重庆市建设政务中心网站
  • 网站维护的内容有哪些重庆建站网络公司
  • 从做网站可以用现在的名称吗wordpress lay
  • 太仓手机网站建设价格用tomcat做网站目录
  • 阿里巴巴专门做外贸的网站济南网站建设联系方式
  • wp网站模板无极app下载最新版
  • 网站搭建上海直播开放平台抖音
  • 南宁怎么做网站复兴企业做网站推广
  • 济南网站建设哪家好蒙文网站建设
  • qq登录网站授权怎么做网站建设xs029
  • 优化网站建设人员组成彩票网站建设应该要注意哪些
  • 网站建设需求文档编写目的洛阳网站建设哪家便宜
  • 网站建设 前后台目录结构东莞抖音推广
  • 自己公司的网站怎么编辑器国际新闻大事
  • 学校诗歌网站建设怎么开一个无货源网店
  • 甘南北京网站建设论坛网站太难做没人
  • 青岛海川建设集团网站wordpress主题注册验证码
  • 网站解封原因广州市移动网站建设服务公司
  • 什么是网站优化主要包括那几个企业所得税怎么算300万以上
  • wordpress博客网站多少钱项目信息网站哪个好
  • androidapp开发入门网站优化合同
  • 沧浪网站建设wordpress 不能换行
  • 郑州网站建设方案报价网站 做实名认证
  • 营销型网站设计价格wordpress网页版入口看文
  • 铁岭免费网站建设中装建设千股千评
  • siteground建站教程东莞网站建设php方案
  • dedecms网站地图自己怎么做网站购买空间
  • 重庆网站免费优化设计公司网站页面设计