目录
本篇博客主要对标准的输入输出函数进行详解,分别是:输入( printf )输出( scanf )函数、字符输入( getchar )输出( putchar )函数、字符串输入( gets )输出( puts )函数等。
1、格式化输入输出
格式化是指按照一定的格式,格式化输入输出就是指按照一定的格式读取来自输入设备的数据和向输出设备输出数据。符合格式化输入输出的代表函数是 printf()函数和 scanf()函数。这两个函数是程序中用的最多的输入输出函数。
在前面的程序控制结构和语句(1) 中,虽然已经初步的了解 printf()输出函数和scanf()输入函数,但是对其详细知识点没有展开的学习。本博客将深入学习这两个函数的详细用法。
1.1 格式化输出函数-----printf()
printf()函数,作用是将计算机中的数据,按照特定的格式输出到终端,使用户能从终端查看数据,它是输出数据的接口。其使用格式如下:
printf("格式化字符",参数列表);
例如:
#include<stdio.h>
int main()
{
int value = 6;
char ch = 'w';
float f = 2.0;
printf("%d %c %f\n",value,ch,f);/*输出变量并换行*/
}
注意:使用这两个函数时必须包含头文件“stdio.h”,sdio.h是standardinput&output的缩写。
没有参数时,调用格式如下:
printf("非格式字符串");
有参数时,调用格式如下:
printf("格式字符",参数列表)
使用这种格式时,格式字符串内包含一个或多个格式控制字符。格式控制字符以“ % ”开头紧跟其后的 d、s、f、 等字符,用以说明输出数据的类型。格式控制字符的个数与参数列表中参数的个数相等,并且一 一对应,输出时,用参数来代替对应的格式控制字符。参数可以是变量也可以是表达式等。
1.2 格式控制字符
在上面的程序中,所使用的%d、%c 和%f 就是格式控制字符。除了这些,还有很多,下表所示就是 C 语言程序中常用的格式控制字符。
格式控制字符 | 含义 |
d | 以十进制形式输出整数值 |
o | 以八进制形式输出整数值 |
x | 以十六进制形式输出整数值 |
u | 以无符号数形式输出整数值 |
c | 输出字符值 |
s | 输出字符串 |
f | 输出十进制浮点数 |
e | 以科学计数法输出浮点数 |
g | 等价于%f或%e,输出两者中占位较短的。 |
格式控制字符的使用方法:
1. d 格式控制字符
(1) %d:以十进制形式输出整。
(2) %md:与%d 相比用 m 限制了数据的宽度,是指数据的位数。当数据的位数小于 m 时以前面补空格的方式输出;反之,如果位数大于m,则按原数输出。
(3)%ld:输出长整型的数据,其表示数据的位数比%d 多。
2. u 格式控制字符
(1)%u:以十进制形式输出无符号的整数。
(2)%mu:与%md 类似,限制了数据的位数。
(3)%lu:与%ld 类似,输出的数据是长整型,范围较大。
3. f 格式控制字符
(1)%f:以小数形式输出实数,整数部分全部输出,小数部分为6位。
(2)%m.nf:以固定的格式输出小数,m 指的是包括小数点在内的数据的位数,n是指小数的位数。当总的数据位数小于m 时,数据左端补空格;如果大于m,则原样输出。
(3)%-m.nf:除了%m.nf的功能以外,还要求输出的数据向左靠齐,右端补空格。
4. c 格式控制字符:输出单个字符 。
5. s 格式控制字符:输出字符串 。
%s、%ms和%-ms 与前面介绍的几种用法相同,故省略。在此介绍%m.ns 和%-m.ns两种。
(1)%m.ns:输出m位的符,从字符串的左端开始截取 n 位的字符,如n小于m位则左端补空格。
为了促进理解,例如:
#include<stdio.h>
int main()
{
int value = 6;
char ch[20] = "wwwwwww";
float f = 2.01;
printf("%8.7s\n", ch);/*输出变量并换行*/
}
(2)(2)%-m,ns:与%mns相比是右端补空格。
6. o 格式控制字符
以八进制形式表示数据。即把内存中数据的二进制形式转换为八进制后输出。由于二进制中有符号位,那么就把符号位也作为八进制的一部分输出。
7. x 格式控制字符
以十六进制形式表示数据。与%o 一样,也把二进制中的符号位作为十六进制中的一部分输出。
8.格式控制字符:以指数形式输出数据。
9.g格式控制字符:%e和%f 中自动选择宽度较小的一种格式输出。
1.3 格式化输入函数-----scanf()
scanf()函数:把从终端读取的符合特定格式的数据输入计算机程序中使用,是输入数据的接口。函数调用格式为:
scanf("格式化字符",地址列表);
例如:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
scanf("%d", &i); /*把输入的数据赋值给变量 i */
scanf("%d %d", &i, &j); /*这样写的话,输入数据的格式是:输入一个数据、空格、再输入一个数据,分别把这两个数据赋值给 i 和 j */
return 0;
}
& 是地址操作符。它的作用是;和对scanf()函数的理解:
变量是存储在内存中的,变量名就是一个代号,内存为每个变量分配一块存储空间,当然,存储空间也有地址,也可以说成是变量的地址。但是,计算机怎么找到这个地址呢? 这就要用到地址操作符&,在&的后面跟上变量就能获取计算机中变量的地址。其实,scanf函数的作用就是把输入的数据根据找到的地址存入内存中,也就是给变量赋值。
有人可能会说,那你开始不是给他它们初始化为0了吗?变量里面不是有内容了吗?把输入的字符再放进去不会出错吗?其实,计算机是这样的:当把一个数据放入一个内存空间里时,会自动覆盖里面的内容。所以,变量保存的是最后输进的值。
2. 字符输入输出
2.1 字符输出函数-----putchar()
putchar 函数:把单个字符输出到标准输出设备。调用格式为:
putchar(variable);/*variable 是一个变量*/
例如:
#include<stdio.h>
int main()
{
int i =67; /*定义一个整型变量*/
char ch = 'C'; /*定义一个字符变量*/
putchar(i); /*数字 67 的 ASCII是大写字母 C*/
putchar('\n'); /*换行效果,屏幕不显示*/
putchar(ch); /*输出字符变量*/
putchar('\n');
putchar('C'); /*输出字符常量*/
return 0;
}
使用 putchar 函数可以输出字符变量、字符常量,也可以使用转义字符起到一些特殊的作用。在这里,putchar(ch) 和 printf("%c",ch)的作用是一样的,都是输出字符变量的值。而 printf("\n")和 putchar('\n')的作用是相同的,都是换行。不光是换行,只要是转义字符这两种形式的作用就是相同的。
注意: 直接输出字符常量或转义字符时,printf 函数里面的是双引号,而putchar函数里面的是单引号。
2.2 字符输入函数-----getchar()
getchar 函数:从标准输入设备上读取单个字符,返回值是字符。调用格式为:
getchar();
例如:
#include<stdio.h>
int main()
{
char ch = 0;/*初始化变量*/
ch = getchar();/*字符输入*/
putchar(ch);/*输出变量*/
putchar('\n');/*换行*/
return 0;
}
输入字符的语句ch=getchar()和 scanf("%c",&ch)的作用一样;输出字符的语句putchar(ch)和printf("%c",ch)的作用相同;putchar('\n')是换行。
3. 字符串输入输出
我们在编程的时候,经常要对字符进行操作,但是,和字符串的操作相比,字符的使用相对要少的多,就像我们用英语单词,语句比单独用 26 个字母的概率大很多一样。所以,对字符串起作用的函数是我们必须掌握的。puts 函数和 gets 函数就是对字符串操作的输入输出函数。
3.1 字符串输出函数-----puts()
puts 函数:向标准输出设备输出已经存在的字符串并换行。函数调用格式为:
puts(s);/*s 为字符串变量*/
例如:
#include<stdio.h>
int main()
{
char str[] = "hello world!";/*定义一个数字,储存了一串字符串*/
char* s=NULL; /*定义一个指针变量,初始化为空*/
s = "hello world!"; /*指针指向一个字符串*/
puts(str);/*输出字符串*/
puts(s);/*输出字符串*/
return 0;
}
格式里的字符串变量s在这里是数组 str 和指针 s。puts() 函数的作用与printf("%s\n",s)相同-----输出字符串并换行。
注 意:①数组是同一类型的数据的集合,指针是用来表示内存地址的。后面会独立的介绍,在这里只要知道数组变量和指针变量可以存储字符串就行了。②puts()函数在遇到"\0"时,就会被替换为 "\n",实现换行。
3.2 字符串输入函数-----gets()
gets 函数:读取标准输入设备输入的字符,直到回车结束。函数调用格式为:
gets();
例如:
#include<stdio.h>
int main()
{
char str[26] = { 0 };
char *s = NULL;/*定义一个数组和一个指针变量*/
gets(str);/*获取输入的字符串*/
gets(s);/*获取输入的字符串*/
puts(str);/*输出字符串*/
puts(s);/*输出字符串*/
return 0;
}
注意:①用 gets 函数获取的字符串一般是放在字符变量里,也是使用数组变量和指针变量。gets 函数除了有输入字符的功能外,还有换行的作用。②scanf()函数和gets()函数有明显区别,scanf函数在遇到空格、回车、空白符时结束输入,gets ()函数仅在遇到回车时结束输入。