2.6、数据的输出

By | 2015年1月11日

本来这一节是准备放在后面再讲的。不过想了一下。把这一节学完了后你就可以简单的输出输出一些数据了。能够在运行中输入一些数据。你能写出的程序就更多了。

同时,如果把输入输出放在一起讲,未免就有些教科书的意思了,这和本教程所希望的“轻松愉悦”的学习环境相违背。我认为学习应该是螺旋式的。同样的内容在不同的时候将,你将有着不同的收获。因此本节中所讲述的内容,在后面的文章中至少还会提到两次。

说了这么多废话,让我们开始正文。

c语言中,并没有提供输出、输入的语句。因此如果我们需要输入输出一些信息,就需要使用“函数”。

在前面的文章中,我们已经接触到了一些输出信息的方法,比如最开始的hello world

我们使用了一个叫做 printf    的函数

前面已经说道过,printf就是print[打印]+format[格式],也就是格式化打印的函数。

在后面,我们使用到了puts函数,puts就是put string[字符串],从字面上来看,它只可以输出一个字符串

此外,还有一个类似的函数,叫做putchar,这个就不用解释了吧,看函数名就知道它是输出一个字符的意思了(我们以后命名也应该这样,见名知义)

现在,让我们以一个程序为例,学习这三个函数的使用方法。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char ch = 'a';      //定义一个名为ch的char型变量,并初始化字符a
    int a = 10, d = 0;  //定义名字分别为a和d的int型变量,初始化为10,0
    double i = 5.5;     //定义一个名为i的double变量,初始化为5.5
    float j = 6.23f;    //定义一个名为j的float变量,初始化为6.23

    printf("ch= '%c'\n", ch);             //以ascii输出ch的值
    printf("a=%d,d=%d\n", a, d);        //输出a和d的值
    printf("i=%lf\n", i);               //输出i的值
    printf("j=%f\n", j);                //输出j的值
    return 0;
}

请先复制到编辑器中,并编译运行

程序中的注释应该已经告诉了你很多信息。

程序的前两行都是include,因为我们使用的输出函数是别人已经写好了的,所以我们需要告诉编译器这些函数在哪儿,长什么模样

第四行定义了一个main函数,程序将从这里开始执行

6-9行是一些变量的定义如果你前面的文章已经看懂了的话,为打赌你知道这些是什么东西。

只有一点需要说的是,在计算机中,浮点型常数都是double类型的,所以如果给float型变量赋值的话,可以在数字后面加上f,告诉编译器这是一个float型的浮点数

但是其实不写也行,编译器会自动转换,不需要我们瞎操心

我们所需要学习的东西从第11行开始。

printf后面跟着一个括号,括号内的东西叫做“参数”,我们想让函数干些什么,需要告诉它一些信息。这些信息可以通过参数来传递给我们所调用的函数(具体将在后面学习)

参数之间是用逗号隔开的,也就是说下面这句

printf(“ch= ‘%c’\n”, ch);

它有两个参数,一个是前面的字符串常量“ch= ‘%c’\n”,这个叫格式控制参数

另一个是后面的ch,这是一个字符型变量。

如果你运行了程序,你将发现,字符串常量中的ch=显示出来了,但是后面的’%c’\n呢

反倒是后面变量ch的值显示出来了,并且好像占据的是%c的位置

没错,就是这样。

在printf中,像这样以%开头,后面跟一个字符的东西,叫做占位符。

它会占住一个位置,说明这里的信息等待填充。

就像你在图书馆占座位,扔一本书上去,告诉别人:这里的位置已经有人占了。但是具体是谁占了呢?我们不一定知道,只有等这个人回来我们才知道是谁。占位符这个位置上的内容,也只有我们输出之后才知道它具体是什么

在printf函数往屏幕上打印字符的时候,占位符的位置将被后面变量中的内容填充。

你可能还会问,那\n在哪儿去了?

转义字符呀!这是一个换行符,当然就是换行了。

现在请你删去第一个printf后面的\n,再编译运行,你将发现区别

那么%c后面的c又是干嘛的?

因为数据在计算机看来,是无差别的。因此我们需要告诉printf,我们输出的这个变量是什么类型的。计算机很笨,但是它很听话,c就是告诉printf,这里应该输出一个字符类型。

往后看,12行中输出了两个整型数据,占位符是%d,你应该猜到d就是告诉printf,这里是一个整型数字了。

但是因为有两个变量需要我们输出,所以这个printf有三个参数

前面一个还是格式参数,它告诉printf应该按照怎样的格式输出,后面就是我们需要输出的两个变量,a和d。printf至少要有一个参数,就是前面的格式参数,后面的变量叫做输出列表,你可以写很多个变量,它的数量会根据前面的格式控制参数而改变

这一次的格式控制参数中,有两个占位符,可以看出,占位符的顺序和后面输出列表中数据的顺序是相同的,如果我们颠倒了后面的参数顺序,printf还是会按照我们规定的格式输出,也就是说会显示a=0,b=10。请尝试

后面两行的printf应该很好理解了。%f是输出float变量,lf(long float)则是double。

下面的这张表中,说明了%后面所接字符代表的含义(部分)

字符 对应的数据类型 含义
d / i int 接受整数值并将它表示为有符号的十进制整数,i是老式写法
o unsigned int 无符号8进制整数(不输出前缀0)
u
unsigned int 无符号10进制整数
x / X
unsigned int 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)
f(lf)
float(double) 单精度浮点数用f,双精度浮点数用lf
e / E
double 科学计数法表示的数,此处”e”的大小写代表在输出时用的“e”的大小写
g / G
double 使用以上两种中最短的形式,大小写的使用同%e和%E
c
char 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符
s / S
char * 输出字符串
%
无输入 不进行转换,输出字符‘%’(百分号)本身

因为我们现在还没有学“字符串变量”,所以基本上用不到字符串输出的情况

等到了后面我们学了如何保存字符串,我们再来学习printf的使用

putchar和上面相比,就简单多了,你只需要

putchar(ch);就可以将ch输出

请自己在程序中添加这一句,并观察结果

puts和putchar的用法相似,但是因为字符串还没有学,故放到后面再讲。

 

最后留一个实验,请用整型的方法输出char类型变量,并对比ascii表,看看有什么发现

一定要做哦

发表评论

邮箱地址不会被公开。 必填项已用*标注