这里写目录标题
一、prinf()
1、函数printf()的一般格式
2、函数printf()的格式转换说明
3、printf()格式修饰符
4、数据显示例子
二、scanf()
1、函数scanf()的一般格式
2、函数scanf()中的格式修饰符
3、输入数据时长需要注意的问题
一、printf()
1.函数printf()的一般格式
printf(格式控制字符串);
printf(格式控制字符串,输出值参数表);
2.函数printf()的格式转换说明:
格式转换说明 | 用法 |
---|---|
%d | 输出带符号的十进制整数,正数符号省略 |
%u | 以无符号的十进制整数形式输出 |
%o | 以无符号的把精致整数形式输出,不输出前导符0 |
%x | 以无符号十六进制整数形式(小写)输出,不输出前导符0x |
%X | 以无符号十六进制整数形式(大写)输出,不输出前导符0X |
%c | 输出一个字符 |
%s | 输出字符串 |
%f | 以十进制小数形式输出实数(包括单,双精度),整数部分全部输出,隐含输出6位小数,输出的数字并非全部时有效数字,单精度实数的有效位数一般为7位,双精度实数的有效位数一般为16位。 %f适合输出向3.14这样的小数位较少的实数,可以是实数输出的宽度较小。 |
%e | 以指数形式(小写e表示指数部分)输出实数,要求小数点前必须有且仅有1位非零数字。 |
%E | 以指数形式(大写E表示指数部分)输出实数 |
%g | 自动选取f或e格式中输出宽度较小的一种使用,且不输出无意义的0 |
%% | 输出百分号% |
3.printf()格式修饰符
在函数printf()的格式说明中,还可以在%和格式符之间插入如下表所示的格式修饰符,用于对输出格式进行微调,如指定输出数据域宽(Field of Width) 、显示精度(小数点后现实的小数位数)、左对齐等。
格式修饰符 | 用法 |
---|---|
英文字母 l | 修饰格式符d,o,x,u时,用于输出long型数据 |
英文字母L | 修饰格式符f,e,g时,用于输出long double型数据 |
英文字母h | 修饰格式d,o,x时,用于输出short型数据 |
输出域宽m(m为整数) | 指定输出项输出是所占的列数。若m为正整数 ,当输出数据宽度小于m时,在域内向右靠齐,左边多余位补空格;当数据宽度大于m时,按实际宽度全部输出;若m由前导符0,则左边多余位补0,若m为负整数,则输出数据在域内向左靠齐。 |
显示精度.n(n为大于或等于0的整数) | 精度修饰符位于最小域宽修饰符之后,由一个圆点及以后的整数构成。对于浮点数,用于指定输出的浮点数小数位数。对于字符串,用于指定从字符串左侧开始截取的子串字符个数 |
4.数据显示例子
#include <stdio.h>
int main()
{
const double pi=3.14159;
double r,circum,area;
printf("Input r:");
scanf("%lf",&r);
circum=2*pi*r;
area=pi*r*r;
printf("printf WITHOUT width or precision specifications:\n");
printf("circumference = %f,area = %f\n",circum,area);
printf("printf WITH width and precision specifications:\n");
printf("circumference = %7.2f,area=%7.2f\n",circum,area);
return 0;
}
程序第11行没有使用宽域和精度说明符即按%f格式输出实型数据,这是除非特别指定,否则隐含输出6位小数。程序第13行,使用宽域和精度说明符即按%7.2f格式输出实行数据,这里%7.2f表示输出数据所占的域宽为7,显示的精度为2。域宽为7表示输出数据占7个字符,2表示小数点后由两位(小数点也算1位),
二、scanf()
1.函数scanf()的一般格式
scanf(格式控制字符串,参数地址表);
其中,格式控制字符串是用双引号括起来的字符串,它包括格式转换说明符和分隔符两个部分。函数scanf()的格式转换说明符通常用%开始,并以一个格式字符结束用于指定各参数的输入格式。
格式转换说明符 | 用法 |
---|---|
%d | 输入十进制整数 |
%o | 输入八进制整数 |
%x | 输入十六进制整数 |
%c | 输入一个字符,空白字符(包括空格、回车、制表符)也作为有效字符输入 |
%s | 输入字符串,遇到空白字符(包括空格、回车、制表符)时,系统认为读入结束(但在开始之前遇到的空白字符会被系统跳过) |
%f或%e | 输入实数,以小数或指数形式输入均可 |
%% | 输入一个百分号 |
参数地址表是由若干变量的地址组成的列表,这些参数之间用逗号隔开。函数scanf()要求必须指定用来接收数据的变量的地址,斗则数据不能正确读入指定的内存单元。
2.函数scanf()中的格式修饰符:
格式修饰符 | 用法 |
---|---|
英文字母l | 加在格式符 d、o、x、u之前,用于输入long型数据;加在格式符f、e之前,用于输入double型数据 |
英文字母L | 加在格式符f、e之前,用于输入long double型数据 |
英文字母h | 加在格式符d、o、x之前,用于输入short型数据 |
域宽m(正整数) | 指定输入数据的宽度(列数),系统自动按此宽度截取所需数据 |
显示精度 .n(0或正整数) | scanf()没有精度修饰符,即用scanf()输入实型数据时不能规定精度 |
忽略输入修饰符 | 表示对应的输入项在读入后不赋给相应的变量 |
在用函数scanf()输入数值型数据时,遇到以下几种情况都认为数据输入结束:
(1).遇空格符、回车符、制表符(Tab);
(2).达到输入域宽;
(3).遇到非法字符输入。
3.输入数据时长需要注意的问题:
例题:
#include <stdio.h>
int main()
{
int a=0,b=0;
int c,d;
printf("---------存在空格----------- \n");
scanf("%d %d",&a,&b);
printf("a=%d,b=%d\n",a,b);
printf("---------存在逗号-----------\n");
scanf("%d,%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
printf("---------使用任意字符用于间隔-----------\n");
scanf("%d%*c%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
printf("---------什么都不存在-----------\n");
scanf("%2d %2d",&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
#include <stdio.h>
int main()
{
int a=0,b=0;
int c,d;
printf("---------存在赋值-----------\n");
scanf("c=%dd=%d",&c,&d);
printf("c=%d,d=%d\n",c,d);
return 0;
}
#include <stdio.h>
int main()
{
int a=0,b=0;
int c,d;
printf("---------输出带引号-----------\n");
scanf("c=%2d d=%2d",&c,&d);
printf("c=%d,d=\"%d\"\n",c,d);
return 0;
}