关于C语言如何做文件和底层操作:

  文件操作,从根本上说,和C语言无关。这部分的内容,是教你如何使用C语言的标准库所提供的一系列函数来操作文件,最基本的最原始的文件操作。你需要理解,我们在这部分所学习的,是函数库的使用,而非C语言。顺便我们还学习了很多和计算机相关的知识,比如重定向、文本文件和二进制文件的江湖恩怨。但是既然不是C语言,也就意味着你将来的工业环境下,未必还会使用这么原始的文件操作函数了。这些函数,只是一个标本,让你知道可以这样来操纵文件。但是,不见得所有的库都是以这样的方式来操纵文件的。

  围绕文件操作,还有一个C语言受时代局限,处理得不够好的东西,就是错误处理。因为文件操作的每一个步骤都很可能在实行过程中遇到问题:文件打不开啦,读了一半出错啦,等等等等,所以设计文件操作函数如何反馈和处理这类运行时刻的问题是需要很好的手段的。C的这个函数库,主要是通过特殊的返回值来实现的。后来的语言,如C++和Java,则引入了异常机制来处理这些事情。

  关于底层操作,我们主要是介绍了按位操作,包括按位的运算、移位和位段。这些操作在日常程序中难得遇到,主要是用于接触硬件的底层程序的。这些内容在本课程是选读的。

格式化的输入输出

  printf和scanf在第一节课就学过,进行输入与输出,在使用这两个函数时,使用%后加字母来表示输出格式,比如%d表示整数的输出格式,那么其实在%和d之间还可以加入一些东西,下面研究下该格式字符串的详细细节:

printf

[flags]

%[flags][width][.prec][hlL]type

  在%和type(d等)之间还可以有4样东西,其中flags标号有四种内容,flags和width是一伙的,做程序一起讲解下:

flags=-

#include <stdio.h>

int main(int argc,char const *argv[]){
printf("%9d\n",123); //9的意思是数据的输出占据9个字符的空间,是右对齐的
printf("%-9d\n",123); //减号的意思是左对齐
}

  运行结果如下,数一下在123前面有6个字符:

      123
123 --------------------------------
Process exited after 0.006233 seconds with return value 10
请按任意键继续. . .

flags=+

  减号的意思是左对齐,flags=+,加号的意思是在前面放+或者-,修改上述程序:

#include <stdio.h>

int main(int argc,char const *argv[]){
printf("%+9d\n",123);
printf("%+-9d\n",123); //又有+,又左对齐。写成%-+9d结果是一致的
}

  输出结果为:

     +123
+123 --------------------------------
Process exited after 0.00621 seconds with return value 10
请按任意键继续. . .

flags=0,意思是0填充:

#include <stdio.h>

int main(int argc,char const *argv[]){
printf("%09d\n",123);
printf("%0-9d\n",123);
}

  运行结果如下,可以看出第一个printf填充了0,但是第二个没用填充,所以0和-是同时使用,有效的是-。

000000123
123 --------------------------------
Process exited after 0.006748 seconds with return value 10
请按任意键继续. . .

[width][.prec]:


####.prec=.2
```
#include

int main(int argc,char const *argv[]){

printf("%9.2f\n",123.0);

}

运行结果如下:

123.00


Process exited after 0.006753 seconds with return value 10

请按任意键继续. . .

  从结果可以看出9并不是小数点前有9位,而是整个数据占据9个字符,.2是说小数点后有两位。
####width=*

include <stdio.h>

int main(int argc,char const argv[]){

printf("%9.2f\n",123.0);

printf("%
d\n",6,123);//号意思是后面的6是填充到所在位置,也就是数组整个占据6个字符,那么此处的6也可以替换为变量len,比如可写成

//printf("%*d\n",len,123);这样可对输出格式进行扩展。

}

  运行结果如下:

123.00

123


Process exited after 0.01804 seconds with return value 7

请按任意键继续. . .

###[hlL]修饰符,修饰类型type
<img src="http://images2015.cnblogs.com/blog/1106248/201703/1106248-20170329112403983-246551374.png" width = "50%" />
####hlL=hh
  hlL=hh是当作单个字节来输出,例如:

include <stdio.h>

int main(int argc,char const *argv[]){

printf("%hhd\n",(char)12345);

}

  输出结果是57,将12345的低位作为char输出,并将该char转换为10进制整数结果就是57.(12345的16进制结果是3039,将0x39转换为十进制为57)
###type
<img src="http://images2015.cnblogs.com/blog/1106248/201703/1106248-20170329112528420-57328523.png" width = "60%" />
##scanf
scanf相对printf简单一些,scanf:%[flags]type,只有flags和type两个参数,涉及到每个选项可以做实验测试,
<img src="http://images2015.cnblogs.com/blog/1106248/201703/1106248-20170329114723561-1630781252.png" width = "60%" />
<img src="http://images2015.cnblogs.com/blog/1106248/201703/1106248-20170329114803092-1306271511.png" width = "60%" />

听翁恺老师mooc笔记(14)--格式化的输入与输出的更多相关文章

  1. 听翁恺老师mooc笔记(16)--程序设计与C语言

    问题1:计算机遍布生活的各个方面,若你需要一个功能可以下载APP,我们需要的大部分功能都可以找到对应的APP,如果没有可以自己写一个软件,但是很少人需要这么做,那么我们为什么学习计算机编程语言? 学习 ...

  2. 听翁恺老师mooc笔记(15)--文件的输入与输出

    <>重定向 如果使用标准的printf输出,有一个比较简便的方法,可以将程序的结果写入一个文件.使用<和>符号,将程序运行结果重定向到文件中去,具体使用到的代码如下: ./te ...

  3. 听翁恺老师mooc笔记(13)--类型定义和联合

    typedef 虽然我们知道使用struct这个关键字定义一个结构类型,然后可以使用该结构类型定义变量.但是每次要使用的时候都需要带着struct这个关键字,那么如何摆脱这个关键字哪?C语言提供了一个 ...

  4. 听翁恺老师mooc笔记(12)--结构中的结构

    结构数组: 和C语言中的int,double一样,一旦我们做出一个结构类型,就可以定义这个结构类型的变量,也可以定义这个结构类型的数组.比如下面这个例子: struct date dates[100] ...

  5. 听翁恺老师mooc笔记(11)--结构和函数

    结构作为函数参数: 声明了一个结构就有了一种自定义的数据类型,这个数据类型和int.float.double一样,int等基本类型可以作为函数的参数,那么这种个自定义的结构类型也应该可以作为函数参数, ...

  6. 听翁恺老师mooc笔记(10)--结构

    定义结构: 在程序里,如果想要表达一个数据就需要一个变量,而每个变量又都需要一个类型,之前学过C语言中有int.double.float.char等这些基础类型,还有指针.数组等.如果你要表达的数据比 ...

  7. 听翁恺老师mooc笔记(9)--枚举

    枚举类型的定义 用符号而不是具体的数字来表示程序中的数字,这么表示的好处是可读性,当别人看你的程序,看到的是单词,很容易理解这些数字背后的含义,那么用什么符号来表示名字哪?需要const int常量的 ...

  8. 听翁恺老师mooc笔记(8)--字符串2

    字符串的赋值 字符串的输入与输出 对C语言的基础类型,比如int.double等类型,scanf.printf有专门的格式转换,而对字符串,scanf.printf使用%s格式字符进行输入与输出.当使 ...

  9. 听翁恺老师mooc笔记(7)--字符串1

    C语言中字符串的定义 如果定义一个字符数组word,并使用大括号对其初始化,如下图所示: 但是这个不是C语言的字符串,只是字符数组,不是字符串,因为不能使用字符串的方式进行计算.那么C语言的字符串长什 ...

随机推荐

  1. eclipse 修改默认的author

    1. 在eclipse.ini中添加 -vmargs -Duser.name={author name} 记得一定要在-vmargs之后,否则无效. 2. 设置eclipse参数 windows--& ...

  2. ASP.NET CORE入门之读取Json配置文件

    首先新建一.net core控制台项目,命名为jsonReader 然后选中引用,选择NuGet包管理器,点击浏览引入mircosoft.aspnetcore.all并安装 选中解决方案,填加,新建项 ...

  3. freemarker写select组件(二十二)

    一,讲解一 1.宏定义 <#macro select id datas> <select id="${id}" name="${id}"> ...

  4. 谈谈在.NET Core中使用Redis和Memcached的序列化问题

    前言 在使用分布式缓存的时候,都不可避免的要做这样一步操作,将数据序列化后再存储到缓存中去. 序列化这一操作,或许是显式的,或许是隐式的,这个取决于使用的package是否有帮我们做这样一件事. 本文 ...

  5. 【CJOJ1167】【洛谷1894】[USACO4.2]完美的牛栏

    题面 Description 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来 ...

  6. 论文笔记(8):BING: Binarized Normed Gradients for Objectness Estimation at 300fps

    译文: <基于二值化赋范梯度特征的一般对象估计> 摘要: 通过训练通用的对象估计方法来产生一组候选对象窗口,能够加速传统的滑动窗口对象检测方法.我们观察到一般对象都会有定义完好的封闭轮廓, ...

  7. python条件控制

    条件控制 现在我们写这样一个程序:在程序里设定好你的年龄,然后启动程序让用户猜测,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是小了 my_age = 24 user_in ...

  8. STM32F10x的启动汇编分析

    ;******************** (C) COPYRIGHT 2009 STMicroelectronics ********************;* File Name         ...

  9. [转] SDP协议

    [转] SDP协议 http://blog.csdn.net/dxpqxb/article/details/18706471 1.SDP协议概述 SDP(Session Description Pro ...

  10. Lintcode212 Space Replacement solution 题解

    [题目描述] Write a method to replace all spaces in a string with%20. The string is given in a characters ...