printf()函数和scanf()函数中的f是format的缩写,这里面用到的“格式”,在C语言其它地方也有很广的应用。
前面已经说过,一个字符用%d格式就可以输出其ASCII码即字符的整数值。用%c格式则输出这个字符。如果用%f格式,则小数的方式输出。
#include
<stdio.h>int
main(void
) {int
days = 360; //“劝学网”三字的ASCII码是“C8B0”“D1A7”“CDF8” printf("\xC8\xB0\xD1\xA7\xCD\xF8\t小雅\n"); //显示:劝学网{TAB}小雅 printf("北京奥运还有: %d天\n", days); printf("\a\a"); //“嘟嘟” //以下三行写在同一行 printf("%s", "这是C语言"); printf("教程\t"); printf("作者:%s\n","小雅"); //360分别以整数、小数、科学计数法显示 printf("整数:%d\n小数:%f\n科学:%e\n",days,(float
)days,(double
)days); //以下控制字节长度 printf("360用5个字节表示:[%5d]\n",days); //[...]中共5字节 printf("3.6保留2位整数2位小数:[%5.2f]\n",(float
)days/100); //[...]中2位整数2位小数, //外加小数点共5字节return
0; }
注意:格式符的个数必须和逗号后面的变量或常量相同,类型也必须一致或可以直接转换。
格式字符 | 类 型 | 输出格式 |
---|---|---|
c | int 或 win_t |
以字符方式输出。 |
C | int 或 win_t |
用在printf()函数中时,以双字节字符显示;用在wprintf()函数中时,以单字节字符显示。 |
d | int | 以整型输出。 |
i | int | 以整型输出。 |
o | int | 以八进制无符号整型输出。 |
u | int | 以无符号整型输出 |
x | int | 以十六进制小写输出(abcdef)。 |
X | int | 以十六进制小写输出(ABCDEF)。 |
e | double | 以科学计数法表示float和double型数据。(其中e用小写) |
E | double | 以科学计数法表示float和double型数据。(其中E用大写) |
f | double | 以小数表示float和double型数据。 |
g | double | 自动地将能显示的很小或很大的数转换成%f,不能直接显示的数则转换成%e。 |
G | double | 自动地将能显示的很小或很大的数转换成%f,不能直接显示的数则转换成%E。 |
n | Pointer to integer | Number of characters successfully written so far to the stream or buffer; this value is stored in the integer whose address is given as the argument. |
p | Pointer to void | 内存地址,以十六进制表示。 |
s | String | 以字符串输出。 |
S | String | 用在printf()函数中时,以双字节字符串显示;用在wprintf()函数中时,以单字节字符串显示。 |
scanf()函数的功能与printf()函数正好相反,是输入数据的功能。但对于初学者却有一难点,即所输入的数据存放到变量时,用到了地址操作。地址操作也就是指针,是C语言的难点、重点,许多人不会C语言的根本原因就是没学会指针。
既然指针这么难,为什么C语言要使用指针呢?C语言产生之前,前辈们都是用机器语言或汇编语言来编程,整天都是与内存地址打交道,C语言使用了指针,使得程序运行速度接近汇编语言,编程效率、实现的功能大大提高。当今电脑硬件的飞速发展,使速度不成问题,于是Java、C#都基本废除了指针的使用。
#include
<stdio.h>int
main(void
) {int
age; //年龄char
name[20]; //姓名 printf("请输入你的年龄:"); scanf("%d", &age); //&age表示变量age的地址 printf("请输入你的姓名:"); scanf("%s", name); //name单独使用就表示变量name的地址 printf("\n姓名=%s\t年龄=%d\n",name,age);return
0; }
上例中,2个变量当作参数使用时,一个用了&符号,一个没用,为什么呢?原来当一个变量的类型是基本类型、或扩充基本类型时,变量的地址要用&符号再加变量名。其它尤其指数组,单独使用变量名,就表示该变量的地址。关于这一点,以后讲完数组和指针后还要详细讨论。