输入输出的概念
- 标准的输出指屏幕终端,标准的输入指键盘,其它的输入输出可以是文件、打印机、扫描仪等设备。
- 在C语言中,所有的数据输入输出都是由库函数完成的,在使用标准输入输出函数库时要用到stdio.h文件,因此源文件开头要使用预处理指令#include将其包括进来:
格式: #include <stdio.h>
printf函数
- printf函数称为格式输出函数,其功能是按用户指定的格式把指定的数据输出。
- printf函数是一个标准函数库,其函数原型声明在头文件stdio.h中。
- printf函数语法:printf("格式控制字符串", 输出列表);
I. 格式控制字符串用于指定输出格式,可由格式字符串和非格式字符串两种组成。
II. 格式控制字符串是以%开头的字符串,在%后面跟各种格式字符,以说明输出数据的类型、形式、长度、小数位等,即:%[标志][输出最小宽度][.精度][长度]类型。
【标志】:
-:结果左对齐,右边填空格。
+:输出符号(正号或负号)。
空格:输出值为正时冠以空格,为负时冠以负号。
#:对c、s、d、u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e、g、f类,当结果有小数时才给出小数点。
【输出最小宽度】:
用十进制整数来表示。
若实际位数多于定义的宽度,则按实际位数输出,若实际位数小于定义的宽度,则补以空格或0,如:%05d(宽度5位,以0补全)、%5d(宽度5位,以空格补全)。
【.精度】
精度格式以.开头,后跟十进制整数。
此项意义为:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分(四舍五入)。
【长度】:
格式符为h、l、L三种,h表示按短整型输出,l表示按长整型输出,L表示按长双精度型输出。
【类型】:
d:以十进制形式输出带符号整数(正数不输出符号)。
o:以八进制形式输出无符号整数(不输出前缀0)。
x,X:以十六进制形式输出无符号整数(不输出前缀Ox)。
u:以十进制形式输出无符号整数。
f:以小数形式输出单、双精度实数。
e,E:以指数形式输出单、双精度实数。
g,G:在%f和%e之间自动选择(选择较短的输出宽度)输出单、双精度实数。
c:输出单个字符。
s:输出字符串。
III. 非格式字符串在输出时按照原样输出。
IV. 输出列表中给出了各个输出项,格式控制字符串和各输出项在数量和类型上应该一一对应。
*的用法:
#include <stdio.h>
int main(void)
{
int a, b;
float c = 555.555;
scanf("%d%d", &a, &b);
// 第一个*指变量a,表示输出最小宽度;第二个*指变量b,表示精度;0表示不满输出最小宽度时,以0补全
printf("c:%0*.*f\n", a, b, c);
return 0;
}
以上程序运行示例:
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# gcc -Wall -O2 -o printf_test printf_test.c
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# ./printf_test
9 4
c:0555.5550
scanf函数
- scanf函数称为格式输入函数,其功能是按用户指定的格式从键盘上把数据输入到指定的变量之中。
- scanf函数是一个标准函数库,其函数原型声明在头文件stdio.h中。
- scanf函数语法:printf("格式控制字符串", 地址列表);
I. 格式控制字符串用于指定输入格式。
II. 格式控制字符串是以%开头的字符串,在%后面跟各种格式字符,以说明输入数据的宽度、长度、类型,即:%[输入数据宽度]长度]类型。
【输入数据宽度】:
用十进制整数来表示。
若实际输入宽度超过指定宽度,则多余部分被截去。
【长度】:
格式符为h、l、L三种,h表示按短整型输入,l表示按长整型输入,L表示按长双精度型输入。
【类型】:
d:输入十进制整数。
o:输入八进制整数。
x,X:输入十六进制整数。
u:输入无符号十进制整数。
f,e,E,g,G:输入浮点数(以小数形式或者指数形式)。
c:输入单个字符。
s:输入字符串。
III. 地址列表中给出各变量的地址,地址是由地址运算符&后跟变量名组成(数组不需要地址运算符&,数组名即是地址)。
普通变量形式:
#include <stdio.h>
int main(void)
{
int a, b;
printf("please input height and width:");
scanf("%d%d", &a, &b);
printf("a:%d \n", a);
printf("b:%d \n", b);
return 0;
}
数组形式:
注意:使用scanf函数无法读取带空格的输入字符串,若需读取带空格的输入字符串,可以使用fgets函数。
#include <stdio.h>
int main(void)
{
char a[20];
printf("please input a word:");
scanf("%s", a);
printf("a:%s \n", a);
return 0;
}
一次输入多个值(多个值之间使用空格分隔):
#include <stdio.h>
int main(void)
{
char a, b;
printf("please input two character:");
// 两个%c之间需使用空格隔开,或者第二个字符将读取两个输入值之间的空格符
scanf("%c %c", &a, &b);
printf("a:%c\n", a);
printf("b:%c\n", b);
return 0;
}
输入多次内容:
#include <stdio.h>
int main(void)
{
int a;
char b;
printf("please input a number:");
scanf("%d", &a);
// 因第一次输入完成后会按回车,因此这里需要使用getchar函数读取回车\n,否则将把回车\n直接赋给变量b
getchar();
printf("please input a character:");
scanf("%c", &b);
printf("a:%d\n", a);
printf("b:%c\n", b);
return 0;
}
*的用法:
#include <stdio.h>
int main(void)
{
int a;
// 这里的*表示跳过,因此这里将跳过前2个的输入数据,将第三个输入数据复制给变量c
scanf("%*d %*d %d", &a);
printf("a:%d\n", a);
return 0;
}
以上程序运行示例:
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# gcc -Wall -O2 -o printf_test printf_test.c
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# ./scanf_test
1
2
3
a:3
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# ./printf_test
1 2 3
a:3
fgets函数
- fgets函数功能是从指定的流stream读取一行,并把它存储在指定的字符串内。当读取(n-1)个字符,或者读取到换行符,或者到达文件末尾时,它会停止,具体视情况而定。
- fgets函数是一个标准函数库,其函数原型声明在头文件stdio.h中。
- fgets函数语法:fgets("字符数组地址", "最多字符数", "从中读取字符的流");
【字符数组地址】:
数组名即是字符数组地址
【最多字符数】:
用十进制整数来表示。
通常使用字符数组的长度。
【从中读取字符的流】
可以是指向FILE对象的指针,或者标准输入stdin。
#include <stdio.h>
int main(void)
{
char a[20];
printf("please input a sentence:");
// stdin指标准输入,一般是从输入设备如键盘的缓冲区输入
fgets(a, sizeof(a)-1, stdin);
printf("a:%s \n", a);
return 0;
}
以上程序运行示例:
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# gcc -Wall -O2 -o printf_test printf_test.c
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# ./fgets_test
please input a sentence:This is a dog.
a:This is a dog.
注意:因为输入完成后按回车表示结束,因此最后打印了一行空行。
getchar函数
- getchar函数是键盘输入函数,从键盘上输入一个字符,通常再将其赋予一个字符变量。
- getchar函数是一个标准函数库,其函数原型声明在头文件stdio.h中。
- getchar函数只能接受单个字符,若输入的是数字,也按字符处理;输入多于一个字符时,只接受第一个字符。
- getchar函数使用:char 字符变量 = getchar()
#include <stdio.h>
int main(void)
{
char a = getchar();
printf("a:%c\n", a);
return 0;
}
putchar函数
- putchar函数是字符输出函数,在屏幕终端上输出单个字符,并且返回输出的字符。
- putchar函数是一个标准函数库,其函数原型声明在头文件stdio.h中。
- getchar函数使用:
#include <stdio.h>
int main(void)
{
char a;
printf("please input a character\n");
a = getchar();
char b = putchar(a);
// 输出换行符时必须使用单引号包括
putchar('\n');
printf("b:%c\n", b);
return 0;
}