3.输出printf() 与 输入scanf()

news2024/11/26 23:45:31

输入 与 输出

    • 1.printf()
    • 2.scanf()

1.printf()

1.1 引用条件

printf()函数使用之前必须要引入<stdio.h>这个头文件


1.2 关于换行

printf()在打印的时候不会自动换行,所以各位需要在输出文本的末尾添加转义字符\n,也就是换行符,不然调式输出的结果会看的很难受。
文本中间也可以添加\n来换行。

int main() {
	printf("我要换行!");
	printf("换了又好像没换。。。");
	printf("我要换行!\n");
	printf("真的换了!\n");
	
	printf("还能在\n文本\n里面换!");
	return 0;
}

在这里插入图片描述


1.3 占位符
printf中的f表示的是format(格式化),这意味着printf()函数可以格式化输出
占位符的第⼀个字符为百分号 % ,第⼆个字符表示占位符的类型
不同的占位符表示不同的数据类型,占位符的位置可以用其他值代入,讲的有点抽象,直接举例

//占位符
int main() {
	printf("字符:%c\n", '1');//占位符%c表示 这里代入的数必须为字符
	printf("整数:%d\n", 1);//占位符%d表示 这里代入的数必须为整数
	printf("字符串:%s\n", "1");//占位符%s表示 这里代入的数必须为字符串
	printf("浮点数:%f\n", 1.0);//占位符%f表示 这里代入的数必须为浮点数
}
	return 0;
}

在这里插入图片描述
如果不按照对应占位符的数据类型代入值的话,会警告+报错,即便执行成功输出的值也会有各种错误(乱码、无结果等)

一段文本中可以有多个占位符

int main() {
	printf("今天考试考了%d分,花了%.2f元买了包烟,路上遇见老%c,他说:“%s", 0,9.99,'A',"抽你个棒棒锤!");
}

在这里插入图片描述


一些常用的占位符及其含义
在这里插入图片描述


1.4 限定宽度
printf()允许限定占位符的最小宽度

%5d 表士这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。
输出的值默认是右对齐,即输出内容左边会有空格
如果希望改成左对齐,即输出内容右边会有空格,可以在占位符的% 的后⾯插⼊⼀个 - 号。

int main()
{
	//整数
	printf("%5d\n", 123); // 输出为 " 123"
	printf("%-5d\n", 123); // 输出为 "123  "
	printf("111111"); //开头和3会有两个空格差
	return 0;
}

在这里插入图片描述

小数限定宽度同理,但是小数默认保留6位小数,所以下述案例中1.0默认输出就为1.000000,已经占了8位,前面补两位。

	//小数
	printf("%10f\n", 1.0); // 输出为"  1.000000"
	printf("%-10f", 1.0); // 输出为"1.000000  "
	printf("111111");

在这里插入图片描述


1.5 限定小数位数

int main() {
	printf("绩点:%.2f\n", 3.555555);
	return 0;
}

在这里插入图片描述
%f占位符默认保留6为小数,可以用%.2f类似的格式来限定小数的位数。


1.6 限定宽度和限定小数位数可以一起使用

int main() {
	printf("%6.2f\n", 3.555);
	return 0;
}

在这里插入图片描述
宽度至少6为,且小数点后保留两位小数[][]3.56前还有两个空格


1.7 使用*来代替宽度和小数保留位数

int main() {
	printf("%*.*f\n", 6,3,3.555);
	return 0;
}

在这里插入图片描述
printf(“%*.*f\n”, 6, 3, 3.555)和printf(“%6.2f\n”, 3.555)结果相同


1.8 占位符%s 输出部分字符
%s 表示代入值必须是字符串,默认是全部输出,如果只需要改字符串中的一部分,可以用 %.[m]s 指定输出长度,其中[m]代表一个数字,其表示需要输出的长度

//%s 输出部分字符
int main() {
	printf("%.5s", "123456789");//12345
	return 0;
}

2.scanf()

2.1 基本用法

int main()
{
	int score = 0;
	printf("请输入成绩:");
	//输入一个值
	scanf("%d", &score);

	//输出
	printf("%d", score);
	return 0;
}

结果出现问题报错(错误代码C4996)
在这里插入图片描述

原因:vs的IDE中编译时认为scanf不安全,所以使用scanf_s替换
注意:但是C语言标准库中依然是scanf,在其他编译器上使用scanf_s是没用的

解决方法

方案1
vs中将scanf替换成scanf_s

方案2(推荐)
当前项目第一行加上代码(一定要加在第一行)
#define _CRT_SECURE_NO_WARNINGS 1

#define  _CRT_SECURE_NO_WARNINGS

一劳永逸的办法:
Visual Studio IDE\Common7\IDE\VC\VCProjectItems目录下会有一个newc++file.cpp文件
在这里插入图片描述
每次新建.c或.cpp文件都是拷贝这个文件的
所以找到这个文件在这个文件中的第一行加上 #define _CRT_SECURE_NO_WARNINGS 1,以后每次新建.c 或 .cpp文件使默认会带有此行代码 #define _CRT_SECURE_NO_WARNINGS 1

方案3
添加代码
#pragma warning(disable:4996)
报错的错误代码为C4996
在这里插入图片描述

可以同时输入多个变量,每个变量和占位符的对应顺序要一致,和占位符定义的数据类型也要一致

 int main()
 {
	int a = 0;
	int b = 0;
	float f1 = 0;
	float f2 = 0;
	scanf("%d %d %f %f", &a,&b,&f1,&f2);
	//scanf("%d%d%f%f", &a,&b,&f1,&f2);//和上行代码相等,执行调式时输出依然要使用空格来隔开
	//scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等
	
	printf("%d %d %f %f", a,b,f1,f2);
	return 0;
}

有⼀个或多个空格不影响 scanf() 解读数据。
另外,用户使用回车键、空格键等,将输入部分分成好几段,也不影响解读。
因为每次输入完一个值后按下回车,scanf()就会开始解读,按照按下回车键的顺序来对占位符进行解读
在这里插入图片描述

2.2 scanf的返回值
scanf() 的返回值是⼀个整数,表示成功读取的变量个数
如果没有没有读取到任何项,或者匹配失败,则返回0
如果在成功读取数据之前

 int main()
 {
	 int a = 0;
	 int b = 0;
	 float f1 = 0;
	 float f2 = 0;
	 int sum = scanf("%d %d %f %f", &a, &b, &f1, &f2);
	 printf("%d", sum);
	 return 0;
 }

全部输入正确
在这里插入图片描述

输入两个正确,然后直接ctrl+z(三个)退出,提前结束
在这里插入图片描述

如果一个数字都不输,直接ctrl+z结束,则输出-1,即EOF
在这里插入图片描述

2.3 占位符
%c :字符。
%d :整数。
%f : float 类型浮点数。
%lf : double 类型浮点数。
%Lf : long double 类型浮点数。
%s :字符串。
%[] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会停止

除了 %c 以外,都会自动忽略起首的空白字符
%c不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格

 int main()
 {
	 char ch = 0;
	 scanf("%c",&ch);
	 printf("%c",ch);
	 printf("xxx");//作为参照物
	 return 0;
 }

此处输入 [空格]a
输出 [空格]xxx
说明输入占位符为字符时,永远只读取第一个字符,不忽略空格
在这里插入图片描述

关于占位符%s,scanf()对其读取的规则:从第一个非空白字符开始前读起 至 遇见的第一个空白字符(即空格、换行符、制表符等)为止。
%s不会包含空白字符,所以不适合读取可能包含空格的字符串。

注意:scanf()函数将字符串读入字符数组时,不会检测字符串是否超出了数组长度。
所以,在使用%s占位符时,建议指定读入字符串的最大长度,即%[m]s,m是一个整数,表示读取字符串的最大长度,超出长度的字符串将会被丢弃。

//字符串%s占位符
 int main()
 {
	 char arr[8];//最大只能输7个字符 末尾还有一个转义字符\0
	 scanf("%3s", &arr);//输入限制在3个字符以内
	 printf("%s", arr);
	 return 0;
 }

在这里插入图片描述

2.4 赋值忽略符
只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃

int main()
{
	int year = 0;
	int month = 0;
	int day = 0;
	scanf("%d%*c%d%*c%d", &year, &month, &day);
	printf("%d-%d-%d", year, month, day);
	return 0;
}

中间夹着的两个%c字符占位符的%后面加了*,所以读取解析后会被丢弃
所以输入时无论中间隔开的这两个字符是什么都不会影响结果。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

通过Docker启动DB2,并在Spring Boot整合DB2(Druid连接池)

1 简介 DB2是IBM的一款优秀的关系型数据库&#xff0c;简单学习一下。 2 Docker安装DB2 为了快速启动&#xff0c;直接使用Docker来安装DB2。先下载镜像如下&#xff1a; docker pull ibmcom/db2 # or docker pull ibmcom/db2:11.5.0.0 启动数据库如下&#xff1a; docker …

【树上操作】定长裁剪 CF1833 G

Problem - G - Codeforces 题意&#xff1a; 给定一棵n个节点的树&#xff0c;请你减掉一些边&#xff0c;使得剪掉后的每个树只有三个节点&#xff0c; 如果可以&#xff0c;第一行返回减掉边的数量&#xff0c;第二行返回减掉边的编号&#xff1b;如果无解&#xff0c;输出…

opencv 图像腐蚀膨胀 erode dilate

#include "iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;int main() {Mat img, dst, dstbin, distancetransform,rel, rel2;img imread("m3.jpg");//转为灰度图cvtColor(img, dst, COLOR_BGR2GRAY);//二…

springcloudAlibaba之nacos集群部署和nginx负载均衡

1.环境准备 nacos server安装包&#xff1a;https://github.com/alibaba/nacos nginx安装包&#xff1a;https://nginx.org/en/download.html 2、nacos配置 将下载好的nacos-server的压缩包解压好以后&#xff0c;复制出N份&#xff08;这里取决于你集群的数量&#xff09;&…

AC自动机(java)

AC自动机 AC自动机介绍代码演示 indexTree AC自动机介绍 AC自动机算法是一种基于Trie树和有限状态机的字符串匹配算法。它在查找字符串时&#xff0c;利用额外的失配指针进行回退&#xff0c;转向其他分支&#xff0c;避免重复匹配前缀&#xff0c;从而提高算法效率。当一个字典…

编译内联导致内存泄漏的问题定位修复

作者&#xff1a;0x264 问题 线上长时间存在一个跟异步 inflate 相关的量级较大的内存泄漏&#xff0c;如下所示&#xff1a; 第一次分析 从内存泄漏粗略看有几个信息&#xff1a; 被泄漏的Activity有很多&#xff0c;所以可能跟某个具体业务的关系不大引用链特别短&#xf…

SkyWalking链路追踪中span全解

基本概念 在SkyWalking链路追踪中&#xff0c;Span&#xff08;跨度&#xff09;是Trace&#xff08;追踪&#xff09;的组成部分之一。Span代表一次调用或操作的单个组件&#xff0c;可以是一个方法调用、一个HTTP请求或者其他类型的操作。 每个Span都包含了一些关键的信息&am…

yaml语法详解

#kv #对空格的严格要求十分高 #注入到我们的配置类中 #普通的keyvalue name: qinjiang#对象 student:name: qingjiangage: 3#行内写法 student1: {name: qinjiang,age: 3}#数组 pets:- cat- dog- pigpet: [cat,dog,pig]yaml可以给实体类赋值 person:name: kuangshenage: 19happ…

css——box-sizing属性

含义 盒子模型由四部分构成&#xff0c;外边距(margin), 边框(border),内边距(padding), 内容content box-sizing 就是指定盒子的大小和结构的。 box-sizing: content-box; //默认值 内容真正宽度 设置的宽度box-sizing: border-box; // 内容真正宽度width 设置的width- 左右p…

LabVIEW可重入VI,VI模板和动态VI之间的差异

LabVIEW可重入VI&#xff0c;VI模板和动态VI之间的差异 应该在何时使用可重入VI、模板VI和动态调用VI&#xff1f;这三种类型之间有什么区别&#xff1f; 可重入VI 当想要同时运行同一VI的多个实例时&#xff0c;将使用可重入VI。当VI不可重入时&#xff0c;VI只有一个数据空…

浏览器对跨域请求携带Cookie的方法

文章目录 一、前后端协商配置1.1 前端页面搭建1.2后端服务器搭建 二、配置允许跨域浏览器三、Chrome浏览器安装ModHeader插件 企业开发时会分开发环境、测试环境以及生产环境&#xff0c;但是有的企业开发只有真正发布到线上的生产环境的流程才会严格配置&#xff0c;有的项目开…

C++线性技巧,STL

例题1&#xff1a;字串计算 样例输入 10101 样例输出 0 2 01 2 1 3 10 2 101 2 直接上代码&#xff1a; #include<iostream> #include<string> #include<map> using namespace std; map<string,int>mp;//用map存储每一个子串出现的次数 string str…

漏洞复现-yapi远程执行命令漏洞复现

目录 漏洞原理漏洞发现漏洞描述影响范围 yapi学习漏洞复现环境搭建exp 入侵检测与防御参考 漏洞原理 漏洞发现 查看issue2229 漏洞描述 网站开放注册功能时可随意注册&#xff0c;设置全局mock脚本可执行任意代码。 影响范围 Yapi < 1.9.2 yapi学习 YApi 是高效、易…

Docker(四)

文章目录 1. docker其他命令补充2. docker-registry使用3. docker-hub的使用4. 企业级私有仓库harbor4.1 harbor安装4.2 harbor配置https4.3 harbor常见使用4.3.1 harbor新建项目仓库4.3.2 harbor创建用户4.3.3 harbor仓库管理4.3.4 harbor复制管理4.3.5 harbor删除镜像 5. doc…

【JavaEE】Spring中注解的方式去获取Bean对象

【JavaEE】Spring的开发要点总结&#xff08;3&#xff09; 文章目录 【JavaEE】Spring的开发要点总结&#xff08;3&#xff09;1. 属性注入1.1 Autowired注解1.2 依赖查找 VS 依赖注入1.3 配合Qualifier 筛选Bean对象1.4 属性注入的优缺点 2. Setter注入2.1 Autowired注解2.2…

【漏洞复现】​金蝶云星空管理中心反序列化命令执行漏洞(RCE)

文章目录 前言声明一、系统简介二、漏洞描述三、影响版本四、漏洞复现五、整改意见 前言 ​金蝶云星空管理中心存在反序列化命令执行,攻击者可通过该漏洞获取敏感信息&#xff0c;进而接管服务器。 声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文…

Mybatis-plus 配置自定义sql(.xml文件)查询语句的步骤

这是使用Mybatis-plus 的自动生成实体类代码生成.xml文件&#xff0c; 所以他会在java目录下&#xff0c;不在resources目录下 如果在java目录下的xml文件&#xff0c;需要分别配置application.yml和pom.xml文件 application.yml 文件进行以下配置&#xff1a; mybatis-plus…

视频增强技术-对比度增强

在图像处理中&#xff0c;由于获取的图像质量不好&#xff0c;需要通过对比度增强来提升图片质量&#xff0c;主要解决的是由于图像灰度级范围较小造成的对比度较低的问题&#xff0c;作用是使图像的灰度级范围放大&#xff0c;从而让图像更加清晰。主要对比度增强方法包括线性…

CentOS 7.9 安装 mydumper(RPM方式)

链接&#xff1a;https://pan.baidu.com/s/1sGhtiKPOmJw1xj0zv-djkA?pwdtaoz 码&#xff1a;taoz 开始正文啦&#xff1a; rpm -ivh mydumper-0.14.5-3-zstd.el7.x86_64.rpm 问题如下&#xff1a; 解决&#xff1a; yum -y install epel-release yum install -y libzstd …

分布式消息流处理平台kafka(一)-kafka单机、集群环境搭建流程及使用入门

1.kafka概述 1.1 kafka的前世今生 kafka最初是LinkedIn的一个内部基础设施系统。最初开发的起因是&#xff0c;LinkedIn虽然有了数据库和其他系统可以用来存储数据&#xff0c;但是缺乏一个可以帮助处理持续数据流的组件。 所以在设计理念上&#xff0c;开发者不想只是开发一…