• c语言-输入输出详解



    格式化输入输出

    输入输出的库函数的头文件: #include
    输入输出简略过程:
    在这里插入图片描述

    在介绍格式化输入输出之前我们先来了解一下占位符吧

    占位符

    1.解析:所谓 “占位符”,就是这个位置可以⽤其他值代⼊。
    如:

    int a = 10;
    printf("a=%d", a);
    
    • 1
    • 2

    在这里插入图片描述
    2.占位符列举

    %a :⼗六进制浮点数,字⺟输出为⼩写。
    • %A :⼗六进制浮点数,字⺟输出为⼤写。
    • %c :字符。 • %d :⼗进制整数。 •
    %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。 • %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
    %i :整数,基本等同于 %d 。
    • %f :⼩数(包含float 类型和 double 类型)。
    • %g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e为⼩写。
    • %G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
    • %hd :⼗进制 short int 类型。
    • %ho :⼋进制 short int 类型。
    • %hx :⼗六进制 short int 类型。
    • %hu :unsigned short int类型。
    • %ld :⼗进制 long int 类型。
    • %lo :⼋进制 long int 类型。
    • %lx :⼗六进制 longint 类型。
    • %lu :unsigned long int 类型。
    • %lld :⼗进制 long long int 类型。
    •%llo :⼋进制 long long int 类型。
    • %llx :⼗六进制 long long int 类型。
    • %llu:unsigned long long int 类型。
    • %Le :科学计数法表⽰的 long double 类型浮点数。
    • %Lf :long double 类型浮点数。
    • %n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
    • %o :⼋进制整数。
    • %p :指针。
    • %s :字符串。
    • %u :⽆符号整数(unsigned int)。
    • %x :⼗六进制整数。
    • %zd : size_t 类型。
    • %% :输出⼀个百分号。

    printf

    1.作用:

    是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以 定制输出⽂本的格式。

    2.格式:

    printf("a=%d", a);
    
    • 1

    在这里插入图片描述

    3.与常见的占位符一起使用
    (1)

    整形:%d – int,%hd – short,%ld – long,%lld – long long 一起使用。
    控制最小宽度:%md >> " m " 代表输出的最小宽度,如%2d>>输出最少两个数字,这里默认是右对齐想要左对齐就在%前面加 - ,如%-md

    如:

    int main() {
    	int a = 10;
    	short b = 110;
    	long c = 222;
    	long long d = 1234;
    	printf("a=%d\n", a);
    	printf("b=%hd\n", b);
    	printf("c=%ld\n", c);
    	printf("d=%lld\n", d);
    	printf("2d=%8lld\n", d);//最小宽度为8,输出:“    1234”//向右对齐
    	printf("-2d=%-8lld\n", d);//最小宽度为8,输出:“1234    ”//向左对齐
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果:
    在这里插入图片描述
    d和-2d看起来一样其实d=1234,-2d=1234(后面还有四个空格)。
    (2)

    浮点型:%f - fiaot、double,%lf - long double(后面默认有6位小数)
    控制最小宽度和限定小数:%m .n f>> " m " 代表输出的最小宽度,如%2f最少输出两个数字,这里默认是右对齐想要左对齐就在%前面加 - ,如%-f,“. n”代表限定的小数个数,如%.3只能输出三个小数,其他用空格填补。

    如:

    int main() {
    	double a = 12.34;
    	float b = 23.45;
    	long double c = 45.67;
    	printf("a=%f\n", a);
    	printf("b=%f\n", b);//默认6位
    	printf("c=%lf\n", c);
    	printf("2b=%.2f\n", b);//.2f--输出两位小数
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    运行结果:
    在这里插入图片描述

    (3)
    整形字符输出 %c–char,%c是输出一个字符
    最小宽度:%mc," m " 代表输出的最小宽度,其余规则和上面一样
    如:

    int main() {
    	char a = 't';
    	printf("%c\n", a);
    	printf("%5c", a);//5--最小宽度
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    第2个 ‘ t ’由于宽度为5,默认右对齐所以前面补了4个空格
    (4)

    字符串输出%s–char[ ]
    最小宽度与限定输出几个字符:%m.n s,“m”最小宽度,:n“限定输出几个字符

    如:

    int main() {
    	char a[] = "abcdef";
    	printf("%s\n", a);
    	printf("%8s\n", a);//最小宽度为8
    	printf("%.4s", a);//限定输出4位
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行结果:
    在这里插入图片描述
    第二个最小宽度为8,默认右对齐所以前面补了2个空格,第3个限定只输出前4个字符
    4.多个占位符输出

    注:多个占位符输出是一定要按照顺序来放变量

    int main() {
    	int a = 10;
    	short b = 110;
    	printf("a=%d b=%hd\n", a, b);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果:
    在这里插入图片描述

    5.返回值

    printf的返回值是输出字符的个数

    如:

    int main() {
    	char a[] = "abcdef";
    int  b=printf("%s\n", a);//一共有7个字符
    printf("%d\n", b);//打印printf的返回值
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果:
    在这里插入图片描述
    abcdef–6个加上转义字符 \n 一共7个

    scanf

    scanf() 函数⽤于读取⽤⼾的键盘输⼊。程序运⾏到这个语句时,会停下来,等待⽤⼾从键盘输⼊。 ⽤⼾输⼊数据、按下回⻋键后, scanf() 就会处理⽤⼾的输⼊,将其存⼊变量。
    注意:变量前⾯必须加上 & 运算符(指针变量除外),因为 scanf() 传递的不是值,⽽是地址,即将变量 i 的地址指向⽤⼾输⼊的值。如果这⾥的变量是指针变量(⽐如字符串变量),那就不⽤加 & 运算符。

    2.格式

    int a = 0;
    scanf("%d", &a);
    
    • 1
    • 2

    在这里插入图片描述

    3.与常见的占位符一起使用
    (1)

    整形:%d – int,%hd – short,%ld – long,%lld – long long 一起使用。
    控制输入宽度,%md,“m”是控制scanf的输入多少位

    如:
    这里举个int型的例子,short、long,也是和下面一样的只不过用的占位符有所差异

    int main() {
    	int a = 0;
    	int b = 0;
    	scanf("%2d ", &a);//限定输入两位
    	printf("a=%d ", a);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行结果:
    在这里插入图片描述
    由于限定了输入两位所以a的值只取了前两位,如果不限制的话a的值就是1234了
    (2)

    浮点型:%f - fiaot,%lf -、double, long double(后面默认有6位小数)
    scanf()只能控制输入的宽度不能控制精度,控制宽度和整形一样

    如:

    int main() {
    	double a = 0.0;
    	scanf("%lf", &a);
    	printf("a=%f ", a);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果:
    在这里插入图片描述
    (3)

    整形字符输出
    %c–char,%c是输出一个字符,这个字符也可以是空格,tab,回车,当按回车就会结束,如果直接按回车,那么就会a=回车字符。
    如果要强制跳过字符前的空⽩字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表⽰跳过零个或多个空⽩字符。

    int main() { 	char a ; 
    	scanf("%c", &a);
    	 	printf("a=%c ", a);
    	 	 	return 0; }
    
    • 1
    • 2
    • 3
    • 4

    运行结果:
    在这里插入图片描述
    (4)

    字符串输出%s–char[ ]
    在字符串输入时遇到空格,tab,回车都会结束,所以scanf的字符串输入只能输入非空格,tab,回车的字符串
    控制长度 :%ms,“m”代表接收多少个字符

    如:

    int main() {
    	char a[127];
    	scanf("%5s", &a);
    	printf("a=%s ", a);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果:
    在这里插入图片描述
    我们这里限定了5,所以只接收了5个字符,当然如果不限制的话就看字符数组长度了
    4.多个占位符输出

    多个值输入时也是按照顺序输入的

    (1)当我们同时进行多个整形数据的输入时可以用空格、tab、回车来直接隔开,
    如:

    int main() {
    	int a = 0;
    	int b = 0;
    	scanf("%d%d ", &a,&b);
    	printf("a=%d b=%d", a,b);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行结果:
    在这里插入图片描述
    我这里用的是回车,当然用tab ,空格也行
    我们也可以用特殊的字符在scanf上对占位符隔开,但是在输入时隔开必须输入与scanf一样字符
    如:
    这里我们用 - 隔开

    int main() {
    	int a = 0;
    	int b = 0;
    	scanf("%d-%d", &a,&b);
    	printf("a=%d b=%d", a,b);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    当我们不按照scanf上的字符输入时:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/a1467ba55c834aa580589f6f0ebf93c5.png
    这里用空格,很明显出现问题了,b的值就没有输入
    当我们按照scanf上的输入时:
    在这里插入图片描述
    这样就没问题啦
    (2)当字符和整数一起输入时,不用加空格等将它们隔开,因为编译器会识别
    我们了来试试吧

    int main() {
    	char a ;
    	int b = 0;
    	scanf("%c%d", &a, &b);
    	printf("a=%c b=%d", a, b);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行结果:
    在这里插入图片描述
    (3)
    整形与字符串
    整形与字符串在一起时必须用空格、tab、回车来隔开,不能像整形和整形那样用特殊字符来隔开
    如:

    int main() {
    	char a[128] ;
    	int b = 0;
    	scanf("%s-%d", &a, &b);
    	printf("a=%s b=%d", a, b);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    用特殊字符隔开
    在这里插入图片描述
    特殊字符被当作一个字符用了,所以一定要用空格、tab、回车来隔开

    int main() {
    	char a[128] ;
    	int b = 0;
    	scanf("%s%d", &a, &b);
    	printf("a=%s b=%d", a, b);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    不用特殊字符隔开
    运行结果:
    在这里插入图片描述

    (4)
    浮点型和整形一起的话就是与整形和整形一样
    浮点型和字符一起的话就是与整形和字符一样
    浮点型和字符串一起的话就是与整形和字符串一样

    5.赋值忽略符

    赋值忽略符(*)
    用在%与字母中间,如:%*b
    作用:忽略在输入的值

    如:

    int main() { 	int a = 0; 
    	int b = 0; 	
    	scanf("%d%*d%d", &a, &b);//这样第二个输入的值就会被忽略掉 
    		printf("a=%d b=%d", a, b); 
    			return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果:
    在这里插入图片描述

    这样上第二个值44就被忽略了

    返回值

    scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。 如果没有读取任何项,或者匹配失败,则返回 0。如果在成功读取任何数据之前,发⽣了读取错误或 者遇到读取到⽂件结尾,则返回常量 EOF。

    如:

    int main() {
    	int a = 0;
    	int b = 0;
    	int t=scanf("%d%d", &a, &b);
    	printf("a=%d b=%d\n", a, b);
    	printf("t=%d", t);//返回值
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    运行结果:
    在这里插入图片描述

    字符串输入输出

    puts()

    作用:输出字符串,并自动换行
    格式:puts();()里可以是一个字符串,也可以是字符串数组
    使用:

    int main() {
    	char arr[] = "asjfil";
    	puts(arr);
    	int  t = puts("fjsdfjs");
    	printf("t=%d", t);//返回值
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行结果:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/c0d6c360a60043b59ab8703cb8854938.png

    返回值为 0 ,并且自动换行了

    gets()

    作用:输入字符串,并且能够接收空格,tab,当遇到回车时结束,字符串是回车之前的字符
    格式:gets();,括号里放字符数组
    使用:

    int main() {
    	char arr[30] ;
    	int t=gets(arr);
    	puts(arr);
    	printf("t=%d", t);//返回值
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行结果:
    在这里插入图片描述
    返回值为随机值,并且能接收空格了

    字符输入输出

    putchar()

    作用:输出一个字符(这个字符也可以是转义字符)
    格式:putchar();()里可以放字符变量和一个字符
    使用:

    int main() {
    	char a='w';
    	int t = putchar(a);
    	putchar('\n');
    	putchar('w');
    	putchar('\n');//转义字符
    	printf("t=%d", t);//返回值
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    运行结果:
    在这里插入图片描述
    返回值为字符的ascll值

    getchar()

    作用:输入一个字符
    格式: char a=getchar();
    使用:

    int main() {
    	char a ;
    a =getchar();
    	putchar(a);
    	putchar('\n');
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    getchar函数只以回车、Enter结束输入,接受空格符。

    区别

    printf 和 puts

    在输出整数浮点数时只能用printf
    在输出字符串时就是puts会自动换行,其他没区别了

    printf和putchar

    在输出整数浮点数时只能用printf
    在输出一个字符时没区别

    scanf和gets

    在输入整数浮点数时只能用scanf
    在输入字符串时scanf不能接收空格、tab,而gest可以接收,并且可以抛弃最后的回车,而scanf不会抛弃,会将空格、tab,回车存在缓冲区里,下次还要输出字符时用调用

    如:

    int main() {
    	char a ;
    	char b;
         scanf("%c",&a);//输入一个字符
    	scanf("%c", &b);//看看b是否调用空格
    	printf("%d %d", a, b);//打印ascii码
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    运行结果:
    在这里插入图片描述
    空格的ASCII就是32,所以scanf会调用上一次留下的字符

    scanf和getchar

    在输入整数浮点数时只能用scanf scanf遇到 回车(enter),空格,TAB 就会结束一次输入,不会接收空格。
    getchar函数只以回车、Enter结束输入,接受空格符。 scanf在一次输入结束后,不会舍弃最后的回车符(即回车符会残留在缓冲区中) getchar回车作为结束的标志,所以在敲回车时’\n’也被存入缓存区,下次还要输出字符时用调用(这个和上的是一个道理哦)

    以上就是我的分享,谢谢大家观看!

  • 相关阅读:
    《C和指针》笔记31:多维数组的数组名、指向多维数组的指针、作为函数参数的多维数组
    盒子模型——边框,以及便捷写法和边框合并
    Python打包(构建)、分发、安装 简要介绍
    VirtualBox VMs 扩展磁盘空间
    CSS面试题
    用好 DIV 和 API,在前端系统中轻松嵌入数据分析模块
    【unity3D-网格编程】01:Mesh基础属性以及用代码创建一个三角形
    线段树板子4
    Tomcat下载安装教程
    csv/json/list/datatable导出为excel的通用模块设计
  • 原文地址:https://blog.csdn.net/2302_79539362/article/details/134492012