c语言-输入输出详解

文章目录

    • 格式化输入输出
      • 占位符
      • 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);//最小宽度为8printf("%.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.rhkb.cn/news/198301.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 堆

手写堆&#xff0c;而非stl中的堆 如何手写一个堆&#xff1f; //将数组建成堆 <O(n) for (int i n / 2;i;i--) //从n/2开始down down(i); 从n/2元素开始down&#xff0c;最下面一层元素的个数是n/2&#xff0c;其余上面的元素的个数是n/2&#xff0c;从最下面一层到最高层…

【论文复现】QuestEval:《QuestEval: Summarization Asks for Fact-based Evaluation》

以下是复现论文《QuestEval: Summarization Asks for Fact-based Evaluation》&#xff08;NAACL 2021&#xff09;代码https://github.com/ThomasScialom/QuestEval/的流程记录&#xff1a; 在服务器上conda创建虚拟环境questeval&#xff08;python版本于readme保持一致&…

【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…

C++--哈希表--散列--冲突--哈希闭散列模拟实现

文章目录 哈希概念一、哈希表闭散列的模拟实现二、开散列(哈希桶)的模拟实现数据类型定义析构函数插入查找删除 哈希概念 unordered系列的关联式容器之所以效率比较高&#xff0c;是因为其底层使用了哈希结构。 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没…

C#WPF文本转语音实例

本文介绍C#WPF文本转语音实例 实现方法:使用类库(SpeechSynthesizer )实现的。 一、首先是安装程序包。 二、创建项目 需要添加引用using System.Speech.Synthesis; UI界面 <Windowx:Class="TextToSpeechDemo.MainWindow"xmlns="http://schemas.micr…

JVM垃圾回收相关概念

目录 一、System.gc()的理解 二、内存溢出与内存泄露 &#xff08;一&#xff09;OOM &#xff08;二&#xff09;内存泄露 三、StopTheWorld 四、垃圾回收的并行与并发 五、安全点与安全区域 &#xff08;一&#xff09;安全点 &#xff08;二&#xff09;安全区域 …

【JavaEE初阶】计算机是如何工作的

一、计算机发展史 计算的需求在⼈类的历史中是广泛存在的&#xff0c;发展大体经历了从⼀般计算⼯具到机械计算机到目前的电子计算机的发展历程。 人类对计算的需求&#xff0c;驱动我们不断的发明、改善计算机。目前这个时代是“电子计算机”的时代&#xff0c;发展的潮流是…

Qt按钮大全续集(QCommandLinkButton和QDialogButtonBox )

## QCommandLinkButton 控件简介 QCommandLinkButton 控件中文名是“命令链接按钮”。QCommandLinkButton 继承QPushButton。CommandLinkButton 控件和 RadioButton 相似,都是用于在互斥选项中选择一项。表面上同平面按钮一样,但是 CommandLinkButton 除带有正常的按钮上的文…

通过汇编理解cortex-m3:第0章

第0章&#xff1a;准备工作 基本想法&#xff1a;利用汇编和gdb调试&#xff0c;来学习cortex-m3汇编指令&#xff0c;以及一些寄存器的功能。 软件和硬件&#xff1a; 硬件&#xff1a;韦东山瑞士军刀中的最小核心板&#xff08;STM32F103C8T6&#xff09; STLINK-V2&#…

初刷leetcode题目(3)——数据结构与算法

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

ROS参数服务器(Param):通信模型、Hello World与拓展

参数服务器在ROS中主要用于实现不同节点之间的数据共享。 参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 使用场景一般存储一些机器人的固有参数&…

C语言实现冒泡排序(超详细)

排序算法 - 冒泡排序 什么是冒泡排序&#xff1f;冒泡排序有啥用呢&#xff1f;冒泡排序的实现代码讲解冒泡排序的总结 什么是冒泡排序&#xff1f; 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的列表&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序…

OpenHarmony源码下载

OpenHarmony源码下载 现在的 OpenHarmony 4.0 源码已经有了&#xff0c;在 https://gitee.com/openharmony 地址中&#xff0c;描述了源码获取的方式&#xff0c;但那是基于 ubuntu 或者说是 Linux 的下载方式。在 windows 平台下的下载方式没有做出介绍。 我自己尝试了 wind…

Python 爬虫入门

文章目录 Python 爬虫入门requests 库beautifulsoup4库函数findall()&#xff0c;find()函数get() 爬虫实例 1&#xff1a;抓小说爬虫实例 2&#xff1a;抓豆瓣 top 250 的电影信息后记 Python 爬虫入门 Python 的爬虫功能使得程序员可以快速抓取并分析网页中的信息&#xff0…

Spring Cloud学习(十)【Elasticsearch搜索功能 分布式搜索引擎02】

文章目录 DSL查询文档DSL查询分类全文检索查询精准查询地理坐标查询组合查询相关性算分Function Score Query复合查询 Boolean Query 搜索结果处理排序分页高亮 RestClient查询文档快速入门match查询精确查询复合查询排序、分页、高亮 黑马旅游案例 DSL查询文档 DSL查询分类 …

大数据HCIE成神之路之数学(2)——线性代数

线性代数 1.1 线性代数内容介绍1.1.1 线性代数介绍1.1.2 代码实现介绍 1.2 线性代数实现1.2.1 reshape运算1.2.2 转置实现1.2.3 矩阵乘法实现1.2.4 矩阵对应运算1.2.5 逆矩阵实现1.2.6 特征值与特征向量1.2.7 求行列式1.2.8 奇异值分解实现1.2.9 线性方程组求解 1.1 线性代数内…

谈谈如何写作(二)

序言 没有什么比一套好理论更有用了。——库尔特勒温 谈谈如何写作系列今天进入第二篇&#xff0c;第一篇请速戳&#xff1a;谈谈如何写作&#xff08;一&#xff09; 今天&#xff0c;博主从如何写报告讲起。 Q&#xff1a;如何写报告 如何写报告呢&#xff1f; 当每位盆友接到…

【华为HCIP | 华为数通工程师】刷题日记1116(一个字惨)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

阿里云ECS11月销量王 99元/年

这一波好像真没得说&#xff0c;老用户居然都有份&#xff0c;买来练习、测试冒似已经够了&#xff01; 阿里云ECS11月销量王 99元/年 2核2G 3M固定带宽不限流量&#xff0c;新老同享&#xff0c;新购、续费同价&#xff0c;开发必备&#xff01; 活动规则 云服务器ECS 云创季…

DevToys:开发者的多功能瑞士军刀,让编程更高效!

DevToys&#xff1a;开发者的多功能瑞士军刀&#xff0c;让编程更高效&#xff01; DevToys 是一款专为开发者设计的实用工具&#xff0c;它能够帮助用户完成日常的开发任务&#xff0c;如格式化 JSON、比较文本和测试正则表达式&#xff08;RegExp&#xff09;。它的优势在于…