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

甘孜网站建设简阳电力建设立项网站

甘孜网站建设,简阳电力建设立项网站,上海广告公司大全,北京正规seo搜索引擎优化价格I/O 函数 C 语言提供了一些函数#xff0c;用于与外部设备通信#xff0c;称为输入输出函数#xff0c;简称 I/O 函数。输入#xff08;import#xff09;指的是获取外部数据#xff0c;输出#xff08;export#xff09;指的是向外部传递数据。 缓存和字节流 严格地…I/O 函数 C 语言提供了一些函数用于与外部设备通信称为输入输出函数简称 I/O 函数。输入import指的是获取外部数据输出export指的是向外部传递数据。 缓存和字节流 严格地说输入输出函数并不是直接与外部设备通信而是通过缓存buffer进行间接通信。这个小节介绍缓存是什么。 普通文件一般都保存在磁盘上面跟 CPU 相比磁盘读取或写入数据是一个很慢的操作。所以程序直接读写磁盘是不可行的可能每执行一行命令都必须等半天。C 语言的解决方案就是只要打开一个文件就在内存里面为这个文件设置一个缓存区。 程序向文件写入数据时程序先把数据放入缓存等到缓存满了再把里面的数据会一次性写入磁盘文件。这时缓存区就空了程序再把新的数据放入缓存重复整个过程。 程序从文件读取数据时文件先把一部分数据放到缓存里面然后程序从缓存获取数据等到缓存空了磁盘文件再把新的数据放入缓存重复整个过程。 内存的读写速度比磁盘快得多缓存的设计减少了读写磁盘的次数大大提高了程序的执行效率。另外一次性移动大块数据要比多次移动小块数据快得多。 这种读写模式对于程序来说就有点像水流stream不是一次性读取或写入所有数据而是一个持续不断的过程。先操作一部分数据等到缓存吞吐完这部分数据再操作下一部分数据。这个过程就叫做字节流操作。 由于缓存读完就空了所以字节流读取都是只能读一次第二次就读不到了。这跟读取文件很不一样。 C 语言的输入输出函数凡是涉及读写文件都是属于字节流操作。输入函数从文件获取数据操作的是输入流输出函数向文件写入数据操作的是输出流。 printf() printf()是最常用的输出函数用于屏幕输出原型定义在头文件stdio.h详见《基本语法》一章。 scanf() 基本用法 scanf()函数用于读取用户的键盘输入。程序运行到这个语句时会停下来等待用户从键盘输入。用户输入数据、按下回车键后scanf()就会处理用户的输入将其存入变量。它的原型定义在头文件stdio.h。 scanf()的语法跟printf()类似。 scanf(%d, i);它的第一个参数是一个格式字符串里面会放置占位符与printf()的占位符基本一致告诉编译器如何解读用户的输入需要提取的数据是什么类型。这是因为 C 语言的数据都是有类型的scanf()必须提前知道用户输入的数据类型才能处理数据。它的其余参数就是存放用户输入的变量格式字符串里面有多少个占位符就有多少个变量。 上面示例中scanf()的第一个参数%d表示用户输入的应该是一个整数。%d就是一个占位符%是占位符的标志d表示整数。第二个参数i表示将用户从键盘输入的整数存入变量i。 注意变量前面必须加上运算符指针变量除外因为scanf()传递的不是值而是地址即将变量i的地址指向用户输入的值。如果这里的变量是指针变量比如字符串变量那就不用加运算符。 下面是一次将键盘输入读入多个变量的例子。 scanf(%d%d%f%f, i, j, x, y);上面示例中格式字符串%d%d%f%f表示用户输入的前两个是整数后两个是浮点数比如1 -20 3.4 -4.0e3。这四个值依次放入i、j、x、y四个变量。 scanf()处理数值占位符时会自动过滤空白字符包括空格、制表符、换行符等。所以用户输入的数据之间有一个或多个空格不影响scanf()解读数据。另外用户使用回车键将输入分成几行也不影响解读。 1 -20 3.4 -4.0e3上面示例中用户分成四行输入得到的结果与一行输入是完全一样的。每次按下回车键以后scanf()就会开始解读如果第一行匹配第一个占位符那么下次按下回车键时就会从第二个占位符开始解读。 scanf()处理用户输入的原理是用户的输入先放入缓存等到按下回车键后按照占位符对缓存进行解读。解读用户输入时会从上一次解读遗留的第一个字符开始直到读完缓存或者遇到第一个不符合条件的字符为止。 int x; float y;// 用户输入 -13.45e12# 0 scanf(%d, x); scanf(%f, y);上面示例中scanf()读取用户输入时%d占位符会忽略起首的空格从-处开始获取数据读取到-13停下来因为后面的.不属于整数的有效字符。这就是说占位符%d会读到-13。 第二次调用scanf()时就会从上一次停止解读的地方继续往下读取。这一次读取的首字符是.由于对应的占位符是%f会读取到.45e12这是采用科学计数法的浮点数格式。后面的#不属于浮点数的有效字符所以会停在这里。 由于scanf()可以连续处理多个占位符所以上面的例子也可以写成下面这样。 scanf(%d%f, x, y);scanf()的返回值是一个整数表示成功读取的变量个数。如果没有读取任何项或者匹配失败则返回0。如果读取到文件结尾则返回常量 EOF。 占位符 scanf()常用的占位符如下与printf()的占位符基本一致。 %c字符。%d整数。%ffloat类型浮点数。%lfdouble类型浮点数。%Lflong double类型浮点数。%s字符串。%[]在方括号中指定一组匹配的字符比如%[0-9]遇到不在集合之中的字符匹配将会停止。 上面所有占位符之中除了%c以外都会自动忽略起首的空白字符。%c不忽略空白字符总是返回当前第一个字符无论该字符是否为空格。如果要强制跳过字符前的空白字符可以写成scanf( %c, ch)即%c前加上一个空格表示跳过零个或多个空白字符。 下面要特别说一下占位符%s它其实不能简单地等同于字符串。它的规则是从当前第一个非空白字符开始读起直到遇到空白字符即空格、换行符、制表符等为止。因为%s不会包含空白字符所以无法用来读取多个单词除非多个%s一起使用。这也意味着scanf()不适合读取可能包含空格的字符串比如书名或歌曲名。另外scanf()遇到%s占位符会在字符串变量末尾存储一个空字符\0。 scanf()将字符串读入字符数组时不会检测字符串是否超过了数组长度。所以储存字符串时很可能会超过数组的边界导致预想不到的结果。为了防止这种情况使用%s占位符时应该指定读入字符串的最长长度即写成%[m]s其中的[m]是一个整数表示读取字符串的最大长度后面的字符将被丢弃。 char name[11]; scanf(%10s, name);上面示例中name是一个长度为11的字符数组scanf()的占位符%10s表示最多读取用户输入的10个字符后面的字符将被丢弃这样就不会有数组溢出的风险了。 赋值忽略符 有时用户的输入可能不符合预定的格式。 scanf(%d-%d-%d, year, month, day);上面示例中如果用户输入2020-01-01就会正确解读出年、月、日。问题是用户可能输入其他格式比如2020/01/01这种情况下scanf()解析数据就会失败。 为了避免这种情况scanf()提供了一个赋值忽略符assignment suppression character*。只要把*加在任何占位符的百分号后面该占位符就不会返回值解析后将被丢弃。 scanf(%d%*c%d%*c%d, year, month, day);上面示例中%*c就是在占位符的百分号后面加入了赋值忽略符*表示这个占位符没有对应的变量解读后不必返回。 sscanf() sscanf()函数与scanf()很类似不同之处是sscanf()从字符串里面而不是从用户输入获取数据。它的原型定义在头文件stdio.h里面。 int sscanf(const char* s, const char* format, ...);sscanf()的第一个参数是一个字符串指针用来从其中获取数据。其他参数都与scanf()相同。 sscanf()主要用来处理其他输入函数读入的字符串从其中提取数据。 fgets(str, sizeof(str), stdin); sscanf(str, %d%d, i, j);上面示例中fgets()先从标准输入获取了一行数据fgets()的介绍详见下一章存入字符数组str。然后sscanf()再从字符串str里面提取两个整数放入变量i和j。 sscanf()的一个好处是它的数据来源不是流数据所以可以反复使用不像scanf()的数据来源是流数据只能读取一次。 sscanf()的返回值是成功赋值的变量的数量如果提取失败返回常量 EOF。 getchar()putchar() 1getchar() getchar()函数返回用户从键盘输入的一个字符使用时不带有任何参数。程序运行到这个命令就会暂停等待用户从键盘输入等同于使用scanf()方法读取一个字符。它的原型定义在头文件stdio.h。 char ch; ch getchar();// 等同于 scanf(%c, ch);getchar()不会忽略起首的空白字符总是返回当前读取的第一个字符无论是否为空格。如果读取失败返回常量 EOF由于 EOF 通常是-1所以返回值的类型要设为 int而不是 char。 由于getchar()返回读取的字符所以可以用在循环条件之中。 while (getchar() ! \n);上面示例中只有读到的字符等于换行符\n才会退出循环常用来跳过某行。while循环的循环体没有任何语句表示对该行不执行任何操作。 下面的例子是计算某一行的字符长度。 int len 0; while(getchar() ! \n)len;上面示例中getchar()每读取一个字符长度变量len就会加1直到读取到换行符为止这时len就是该行的字符长度。 下面的例子是跳过空格字符。 while ((ch getchar()) );上面示例中结束循环后变量ch等于第一个非空格字符。 2putchar() putchar()函数将它的参数字符输出到屏幕等同于使用printf()输出一个字符。它的原型定义在头文件stdio.h。 putchar(ch); // 等同于 printf(%c, ch);操作成功时putchar()返回输出的字符否则返回常量 EOF。 3小结 由于getchar()和putchar()这两个函数的用法要比scanf()和printf()更简单而且通常是用宏来实现所以要比scanf()和printf()更快。如果操作单个字符建议优先使用这两个函数。 puts() puts()函数用于将参数字符串显示在屏幕stdout上并且自动在字符串末尾添加换行符。它的原型定义在头文件stdio.h。 puts(Here are some messages:); puts(Hello World);上面示例中puts()在屏幕上输出两行内容。 写入成功时puts()返回一个非负整数否则返回常量 EOF。 gets() gets()函数以前用于从stdin读取整行输入现在已经被废除了仍然放在这里介绍一下。 该函数读取用户的一行输入不会跳过起始处的空白字符直到遇到换行符为止。这个函数会丢弃换行符将其余字符放入参数变量并在这些字符的末尾添加一个空字符\0使其成为一个字符串。 它经常与puts()配合使用。 char words[81];puts(Enter a string, please); gets(words);上面示例使用puts()在屏幕上输出提示然后使用gets()获取用户的输入。 由于gets()获取的字符串可能超过字符数组变量的最大长度有安全风险建议不要使用改为使用fgets()。
http://www.dnsts.com.cn/news/34115.html

相关文章:

  • wordpress的主要功能廊坊seo网站管理
  • 网站不收录的技术原因思科中国网站开发案例
  • 什么是网站设计与建设做零售去哪个外贸网站
  • zencart 网站老是跳转到原地址做润滑油网站图片
  • 新手建立企业网站流程工业设计网站哪个好用
  • 搜索大全浏览器seo网站页面f布局
  • 深圳市住房和建设局网站首页响应式网站断点
  • 杭州网站建设案例中学网站建设方案
  • 十堰做网站的工作室响应式企业网站源码
  • 男女做恩爱视频网站大连制作网站报价
  • 网站建设相关职业岗位徐水区住房和城乡建设局网站
  • 对网站备案的认识展示型网站建设价格
  • 做外汇模拟的网站网络营销渠道和传统营销渠道的区别
  • 宁波网站开发rswl重庆住房城乡建设厅网站首页
  • 在ps中网站界面应做多大seo网站建设方案
  • 江宁做网站价格怎么做网站文件验证
  • 网页开发公司网站猪八戒建站服务
  • 给公司做网站多钱哪些网站可以做翻译兼职
  • 做网站 什么后缀怎么选择五屏网站建设
  • 网站原型是什么圣玺企业网站建设
  • 功能网站首页模板网站活动专题页面
  • 做视频网站服务器怎么选择建设银行 网站设置密码
  • 仙居住房和城乡建设部网站圆方k20在线设计网站
  • 电白区住房和城乡建设局网站wordpress获取自定义栏目
  • 小红书关键词检测seo网站是什么
  • 中英文双语的网站怎么建设外贸网站是什么意思
  • 大连做网站大公司青岛公司网站建设价格低
  • 河南手机网站建设多少钱广州天河区必去的地方
  • 虚拟机如何做网站龙岩网红隧道在哪
  • 电商网站开发公司哪家好资阳房产网站建设