chap03:格式化输入与输出

发布时间:2023年12月27日


printf()函数用来向标准输出设备(屏幕)写数据;

scanf() 函数用来从标准输入设备(键盘)上读数据。

一、标准输出函数printf

1 、一般格式

printf(格式控制,输出表列)

例如:printf(“i=%d,ch=%c\n”,i,ch);

说明:

(1) “格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息:

? ①格式说明:由“%”和格式字符组成,它的作用是将输出表列中的对应数据转换为指定的格式输出。

? ②普通字符(含转义字符),即需要原样输出的字符。

(2) “输出表列”是需要输出的一些数据,可以是常量、变量、表达式或函数调用

2 、格式控制

格式说明的形式为: %[flags][width][.precision][length]specifier

  • 说明符(specifier):用于规定输出数据的类型,含义如下:
说明符(specifier)对应数据类型描述
d / iint输出类型为有符号的十进制整数,i 是老式写法
ounsigned int输出类型为无符号八进制整数(没有前导 0)
uunsigned int输出类型为无符号十进制整数
x | Xunsigned int输出类型为无符号十六进制整数,x 对应的是 abcdef,X 对应的是 ABCDEF(没有前导 0x 或者 0X)
f | lfdouble输出类型为十进制表示的浮点数,默认精度为6(lf 在 C99 开始加入标准,意思和 f 相同)
e | Edouble输出类型为科学计数法表示的数,此处 “e” 的大小写代表在输出时用的 “e” 的大小写,默认浮点数精度为6
gdouble根据数值不同自动选择 %f 或 %e,%e 格式在指数小于-4或指数大于等于精度时用使用
Gdouble根据数值不同自动选择 %f 或 %E,%E 格式在指数小于-4或指数大于等于精度时用使用
cchar输出类型为字符型。可以把输入的数字按照ASCII码相应转换为对应的字符
schar *输出类型为字符串。输出字符串中的字符直至遇到字符串中的空字符(字符串以 '\0‘ 结尾,这个 ‘\0’ 即空字符)或者已打印了由精度指定的字符数 (后面会学)
pvoid *以16进制形式输出指针(后面会学)
%不转换参数不进行转换,输出字符‘%’(百分号)本身
  • 标志(flags):用于规定输出样式,含义如下:
flags字符名称描述
-减号在给定的字段宽度内左对齐,右边填充空格(默认右对齐)
+加号强制在结果之前显示加号或减号(+ 或 -),即正数前面会显示 + 号; 默认情况下,只有负数前面会显示一个 - 号
(空格)空格输出值为正时加上空格,为负时加上负号
#井号specifier 是 o、x、X 时,增加前缀 0、0x、0X; specifier 是 e、E、f、g、G 时,一定使用小数点; specifier 是 g、G 时,尾部的 0 保留
0数字零对于所有的数字格式,使用前导零填充字段宽度(如果出现了减号标志或者指定了精度,则忽略该标志)
  • 最小宽度(width):用于控制显示字段的宽度,字段宽度的最小值,如果输出的字段长度小于该数,结果会用前导空格填充;如果输出的字段长度大于该数,结果使用更宽的字段,不会截断输出。

  • 精度(.precision)用于指定输出精度。

    对于整数说明符(d、i、o、u、x、X):precision 指定了要打印的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符;

    对于 e、E 和 f 说明符:要在小数点后输出的小数位数;

    对于 g 和 G 说明符:要输出的最大有效位数;

    对于 s 说明符:要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符;

  • 类型长度(length)用于控制待输出数据的数据类型长度。(不重要)

运行以下实例,看看结果,好好理解

#include<stdio.h>
int main(){
	 int a=7,b=2;
	 int m=-32768;
	 char c=97;
	 float f = 3.456;
	 double d = 321.654654;
	 printf("%d+%d=%d\n",a,b,a+b);
	 printf("%4d+%d=%d\n",a,b,a+b);
	 printf("%-4d+%d=%d\n",a,b,a+b);
	 printf("a的十进制%d,八进制%o,十六进制%x\n",a,a,a);
	 printf("m=%d,m=%u\n",m,m);
	 printf("c=%c,c=%u\n",c,c);
	 printf("f=%f,d=%f\n",f,d);
	 printf("f=%-10.2f,d=%5.4f\n",f,d);
}

二、标准输入函数scanf

按规定格式从键盘输入若干任何类型的数据给地址列表所指的单元。

一般形式为:

scanf(“格式控制字符串”,地址列表);

说明:(简单理解下面情况即可,更深入的理解参考:百度百科 scanf

格式控制字符串

  • 数值型数据连着写的如“%d%d”,在输入数据时,数据之间要用空白字符(空格、tab键或者回车键)分隔;
  • 如果有正常字符(普通字符),要原样输入;
  • 字符型数据连着写的如“%c%c”,在输入数据时,空格、制表符和新行符在读单字符操作中要按一般字符处理。

实例:

#include<stdio.h>

int main(){
	int a, b;
	char c; 
    
    scanf("%d%d", &a, &b);  // 第一种情况:输入时空白符分隔数据 
    printf("a=%d,b=%d\n", a, b);
    
    scanf("%d,%d", &a, &b);  // 第二种情况:正常字符原样输入 
    printf("a=%d,b=%d\n", a, b);
    
    scanf("a=%d,b=%d", &a, &b);  // 思考此种情况如何正确输入 
    printf("a=%d,b=%d\n", a, b);
    
    scanf("%d%d%c", &a, &b, &c);  // 注意与字符型数据混合输入时,虽然空格、制表符和新行符都用做域分割符号,但读单字符操作中却按一般字符处理。 
    printf("a=%d,b=%d,c=%d\n", a, b, c);
}

三、对字符型数据的一些补充说明

有字符型变量声明如下:

char ch=‘A’;

系统是将字符A的ASCII码65赋值给变量ch

因此:ch尽管是一个字符型变量,但事实上可以将ch看成一个1字节的整型变量。可存储0~255之间的整数。

  • 字符型变量即可以以字符型格式输出,也可以用整形格式输出:
    printf("整型输出:%d,字符型输出:%c",ch,ch);

? 输出结果为:整型输出:65,字符型输出:A

  • 可以按整型数进行运算
    ch = ch +32;
	printf("整型输出:%d,字符型输出:%c",ch,ch);

? 输出结果为:整型输出:97,字符型输出:a

四、练习

按示例,在每个注释后面添加语句,完成注释内容

#include<stdio.h>
int main(){
    //定义两个整型变量a和b
    int a,b;
    //定义两个单精度浮点型变量f1和f2
    
    //定义两个单精度浮点型变量f1和f2
    
    //定义两个双精度浮点型变量d1和d2
    
    //定义一个字符型变量ch
    
    //提示输入两个整型数并存入变量a和b
    printf("请输入两个整型数:");
    scanf("%d%d",&a,&b);
    //提示输入两个单精度浮点型数并存入变量f1和f2
    
    
    //提示输入两个双精度浮点型数并存入变量d1和d2
    
    
    //提示输入一个字符并存入变量ch  
    
    
    //分别输出a与b 加、减、乘、除、取模(求余)运算的结果。加运算已给出示例
    printf("%d + %d = %d\n",a,b,a+b);
    
    
    
    //输出f1,d1里的数,并保留三位小数
    
    
    //输出ch的ASCII码与字符
    
}
文章来源:https://blog.csdn.net/qq_22891627/article/details/135166656
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。