c语言-输入输出详解

news2024/11/15 4:24:58

文章目录

    • 格式化输入输出
      • 占位符
      • printf
      • scanf
    • 字符串输入输出
      • puts()
      • gets()
    • 字符输入输出
      • putchar()
      • getchar()
    • 区别


格式化输入输出

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

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

占位符

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

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

在这里插入图片描述
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);

在这里插入图片描述

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;
}

运行结果:
在这里插入图片描述
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;
}

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

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

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

在这里插入图片描述
第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;
}

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

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

int main() {
	int a = 10;
	short b = 110;
	printf("a=%d b=%hd\n", a, b);
	return 0;
}

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

5.返回值

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

如:

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

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

scanf

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

2.格式

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

在这里插入图片描述

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;
}

运行结果:
在这里插入图片描述
由于限定了输入两位所以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;
}

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

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

int main() { 	char a ; 
	scanf("%c", &a);
	 	printf("a=%c ", a);
	 	 	return 0; }

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

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

如:

int main() {
	char a[127];
	scanf("%5s", &a);
	printf("a=%s ", a);
	return 0;
}

运行结果:
在这里插入图片描述
我们这里限定了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;
}

运行结果:
在这里插入图片描述
我这里用的是回车,当然用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;
}

当我们不按照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;
}

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

int main() {
	char a[128] ;
	int b = 0;
	scanf("%s-%d", &a, &b);
	printf("a=%s b=%d", a, b);
	return 0;
}

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

int main() {
	char a[128] ;
	int b = 0;
	scanf("%s%d", &a, &b);
	printf("a=%s b=%d", a, b);
	return 0;
}

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

(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;
}

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

这样上第二个值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;
}

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

字符串输入输出

puts()

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

int main() {
	char arr[] = "asjfil";
	puts(arr);
	int  t = puts("fjsdfjs");
	printf("t=%d", t);//返回值
	return 0;
}

运行结果:
![在这里插入图片描述](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;
}

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

字符输入输出

putchar()

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

int main() {
	char a='w';
	int t = putchar(a);
	putchar('\n');
	putchar('w');
	putchar('\n');//转义字符
	printf("t=%d", t);//返回值
	return 0;
}

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

getchar()

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

int main() {
	char a ;
a =getchar();
	putchar(a);
	putchar('\n');
	return 0;
}

在这里插入图片描述
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;
}

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

scanf和getchar

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1228403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023/11/19总结

项目进度&#xff1a; 地址管理&#xff1a; 显示菜品 购物车相关功能 然后最近在看 支付宝沙盒支付的相关功能&#xff0c;打算把支付给做了 。界面做的不是很好看 &#xff0c;但是后续会改成 手机端的。

WSL 2 更改默认安装的 Linux 发行版

目录 什么是 WSL 2&#xff1f;更改默认安装的 Linux 发行版更改发行版的 WSL 版本 什么是 WSL 2&#xff1f; WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本&#xff0c;它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的…

基于SSM的北海旅游网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

ICCV2023 Tracking paper汇总(二)(多目标跟随、单目标跟随等)

十六、Integrating Boxes and Masks: A Multi-Object Framework for Unified Visual Tracking and Segmentation paper&#xff1a; https://openaccess.thecvf.com/content/ICCV2023/papers/Xu_Integrating_Boxes_and_Masks_A_Multi-Object_Framework_for_Unified_Visual_ICC…

Android 13 - Media框架(14)- OpenMax(二)

这一节我们将来解析 media.codec 这个 HIDL service 究竟提供了什么服务&#xff0c;服务是如何启动的。 1、main 函数 我们先来看 frameworks/av/services/mediacodec/main_codecservice.cpp&#xff1a; int main(int argc __unused, char** argv) {strcpy(argv[0], "…

搭建网关服务器实现DHCP自动分配、HTTP服务和免密登录

目录 一. 实验要求 二. 实验准备 三. 实验过程 1. 网关服务器新建网卡并改为仅主机模式 2. 修改新建网卡IP配置文件并重启服务 3. 搭建网关服务器的dhcp服务 4. 修改server2网卡配置文件重启服务并效验 5. 设置主机1的网络连接为仅主机模式 6. 给server2和网关服务器之…

【Django-DRF用法】多年积累md笔记,第(4)篇:Django-DRF反序列化详解

本文从分析现在流行的前后端分离Web应用模式说起&#xff0c;然后介绍如何设计REST API&#xff0c;通过使用Django来实现一个REST API为例&#xff0c;明确后端开发REST API要做的最核心工作&#xff0c;然后介绍Django REST framework能帮助我们简化开发REST API的工作。 全…

性能测试学习——项目环境搭建和Jmete学习二

项目环境搭建、Jmeter学习二 环境的部署虚拟机的安装虚拟机中添加项目操作步骤 使用环境的注意事项Jmeter的安装和简单使用Jemter的使用的进阶Jemter元件 Jmeter属性执行顺序和作用域作用域以自定义用户变量和用户参数(前置处理器)为例如何解决用户变量和线程组同级时&#xff…

C语言之qsort()函数的模拟实现

C语言之qsort()函数的模拟实现 文章目录 C语言之qsort()函数的模拟实现1. 简介2. 冒泡排序3. 对冒泡排序进行改造4. 改造部分4.1 保留部分的冒泡排序4.2 比较部分4.3 交换部分 5. bubble_sort2完整代码6. 使用bubble_sort2来排序整型数组7. 使用bubble_sort2来排序结构体数组7.…

系列六、GC垃圾回收【四大垃圾算法-标记清除算法】

一、概述 标记清除算法分为两个阶段&#xff0c;即&#xff1a;标记和清除两个阶段&#xff0c;先标记出要回收的对象&#xff0c;然后统一回收这些对象。形如&#xff1a; 老年代一般是由标记清除或者标记清除 标记压缩的混合实现。 二、原理 用通俗的话解释一下标记清除算法…

LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve

接着前面的Langchain&#xff0c;继续实现读取YouTube的视频脚本来问答Indexes for information retrieve LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗…

一文了解Word2vec 阐述训练流程

一文了解Word2vec 阐述训练流程 个性嵌入&#xff08;Personality Embeddings&#xff09; 词嵌入&#xff08;Word Embeddings&#xff09; 嵌入向量效果分析 语言模型 模型介绍 模型训练 Word2vec训练方法 CBOW方法 Skip-gram方法 CBOW方法与Skip-gram方法总结 重构…

高精度算法【Java】(待更新中~)

高进度加法 在Java中可以使用BigInteger进行高精度计算&#xff0c;除此也可以仿照竖式相加的计算原理进行计算。 BigInteger 提供所有 Java 的基本整数操作符的对应物&#xff0c;并提供 java.lang.Math 的所有相关方法。另外&#xff0c;BigInteger 还提供以下运算&#xff1…

交易机器人-微信群通知

微信公众号:大数据高性能计算 1 背景 背景是基于人工去做交易本身无法做到24小时无时无刻的交易,主要是虚拟币本身它是24小时交易,人无法做到24小时盯盘,其次就是如果你希望通过配置更加复杂的规则甚至需要爬取最新的信息走模型进行量化交易的时候,就需要自己去做一些量化…

【Flink 问题集】The generic type parameters of ‘Collector‘ are missing

错误展示&#xff1a; Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function main(CollectionDemo.java:33) could not be determined automatically, due to type erasure. You can give type in…

蓝桥杯单片机综合练习——工厂灯光控制

一、题目 二、代码 #include <reg52.h>sfr AUXR 0x8e; //定义辅助寄存器sbit S5 P3^2; //定义S5按键引脚 sbit S4 P3^3; //定义S4按键引脚unsigned char led_stat 0xff; //定义LED当前状态 unsigned char count 0; //定义50ms定时中断累…

我又开始贩卖焦虑了,机器视觉兄弟们,打工这生意盘不活了?让人逃离北上广深,是毒鸡汤吗?

我想大多数人和我想的一样&#xff0c;不要质疑自己的出身&#xff0c;也不必用一生去改变出身而获得融入感&#xff0c;思想富足这是我们留给自己一生最珍贵的礼物。也许一线城市容不下肉身&#xff0c;二三线城市容不下灵魂。那我回到生我养我的十八线小县城&#xff0c;这不…

【Linux】冯诺依曼体系结构、操作系统、进程概念、进程状态、环境变量、进程地址空间

目录 一、冯诺依曼体系结构二、操作系统(OS)1. 操作系统是什么2. 操作系统如何做管理3. 系统调用和库函数概念 三、进程1. 进程是什么&#xff1f;2. 描述进程-PCB3. 查看进程的方法 四、进程状态1 运行、阻塞和挂起状态2 Linux中的进程状态 五、进程优先级1. 什么是优先级2.查…

NSS [NCTF 2018]小绿草之最强大脑

NSS [NCTF 2018]小绿草之最强大脑 题目要求我们输入一个位数>21的正数&#xff0c;带入表达式并且计算结果。 查看源码发现hint&#xff0c;有源码泄露。 拿dirsearch扫一下。扫到了一个备份文件。 python dirsearch.py -u http://node4.anna.nssctf.cn:28805/访问/index.…

云原生专栏丨基于服务网格的企业级灰度发布技术

灰度发布&#xff08;又名金丝雀发布&#xff09;是指在黑与白之间&#xff0c;能够平滑过渡的一种发布方式。在其上可以进行A/B testing&#xff0c;即让一部分用户继续用产品特性A&#xff0c;一部分用户开始用产品特性B&#xff0c;如果用户对B没有什么反对意见&#xff0c;…