Reference:
参考:C语言入门经典(第四版)
Guide:
了解最基本的输入输出,以及格式控制符的详细使用
在C语言中,所有数据的输入输出都是由<stdio.h>中的库函数完成的,所以必须将该头文件包含进去。
stdio的意思是standard input output。
一、putchar和getchar函数
putchar函数是字符输出函数,其功能实在显示器上输出单个字符。
一一般形式为:
putchar(字符变量);
例如:
puchar('A');
puchar('\n');
对于控制字符则执行控制功能,不再屏幕上显示。
getchar函数的功能是从键盘上输入一个字符。
其一般形式为:
getchar();
通常把输入的字符赋值给一个字符变量,例如:
char c;
c=getchar();
getchar函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接受一个字符。
二、格式输入和输出
1、printf函数即格式输出函数,f就是format的意思。
printf函数调用的一般形式
prinf("格式控制字符串",输出列表);
其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。
格式字符串是以%开头的字符串,在%后面跟各种格式字符。
格式字符串的具体格式
[标志][输出最小宽度][.精度][长度]类型
各项介绍如下:
1)类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示:
格式字符 | 意义 |
d | 以十进制形式输出带符号整数(正数输出符号) |
o | 以八进制形式输出无符号整数(不输出前缀0) |
x,X | 以十六进制形式输出无符号整数(不输出前缀0x) |
u | 以十进制输出无符号整数 |
f | 以小数形式输出单、双精度实数 |
e,E | 以指数形式输出单、双精度实数 |
g,G | 以%f或%e中较短的输出宽度输出单、双精度实数 |
c | 输出单个字符 |
s | 输出字符串 |
2)、标志:标志字符为-、+、#、空格四种,其意义如下:
标志 | 意义 |
- | 结果左对齐,右边填空格 |
+ | 输出符号(正号或者负号) |
# | 对c,s,d,u类五影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f类当结果有小数时才给出小数点。 |
空格 | 输出值为正时冠以空格,为负是冠以负号 |
3)、输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度,则补以空格或0
4)、精度:精度格式符以“."开头,后跟十进制整数。本项的意义是:如果输出数字。则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
5)、长度:长度格式符为h,l两种。h表示按短整型输出,l表示按长整型输出。
%lf 表示输出双精度类型数据
%ld 表示输入长整型数据
2、scanf函数,称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
scanf函数的一般形式为:
scanf("格式控制字符串",地址列表);
其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是说不能显示提示字符串。地址表列给出个变量的地址。地址是由地址运算符“&后跟变量名组成的。
如:
%a ,%b
分别表示变量a和变量b的地址。
格式字符串:
格式字符串的一般形式为:
%[*][输入数据宽度][长度]类型
其中有方括号的项为任选项。各项的意义如下:
1)类型:类型字符用以表示输入数据的类型,其格式符和意义如下表所示:
格式字符 | 意义 |
d | 输入十进制整数 |
o | 输入进制整数 |
x | 输入十六进制整数 |
u | 输入无符号十进制整数 |
f或e | 输入实型数(用小数形式或指数形式) |
c | 输入单个字符 |
s | 输入字符串 |
2)“ * ”符:用以表示该输入相,读入后不赋予相应的变量,即跳过该输入值。
如:scanf("%d %*d %d",&a,&b);
当输入时:1 2 3 时,把1赋予a ,2被跳过, 3赋予b。
3)、宽度:用十进制整数指定输入的宽度(即字符数)。
例如:
scanf("%5d",&a);
输入12345678
只把12345赋予变量a,其余部分被截去。
又如:
scanf("%4d%4d",&a,%b);
输入12345678
把1234赋予变量a,把5678赋予变量b
又如:
scanf("%4d%4d",&a,%b);
输入12345678 99999999
还是把把1234赋予变量a,把5678赋予变量b。多做几个例子就能明白。
4)、长度:长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据。
scanf使用注意事项:
①、在输入多个数值数据时,若格式控制串中没有非格式字符串做输入数据之间的间隔则可用空格,TAB或回车做间隔。C编译在碰到空格、TAB、回车或非法数据(如对“%d”输入"12A"时,A即为非法数据)时即认为该数据结束
example1:可以使用在格式控制串中使用非法字符作为变量的结束标志
example2:当然可以使用空格最为变量的结束标志:
②、在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符
example3:如果格式控制串中没有空格,那么在输入的时候也不能加空格,否则,空格也会被赋予变量值
只有这样输入才是正确的
或者在格式控制符上加入非法字符或者空格