4月4日今日预告:printf+scanf+分支循环,if语句,else悬空问题,加油,干干干这篇文章三个小时半了,从愚人节被告知今天就有课程-今日4/3,

 

今天中午知道要爆肝的C语言的,今天本来作业好多的;

干了,家人们

做一些补充:

一:printf() 参数与占位符对应关系

printf() 参数与占位符是⼀⼀对应关系,如果有 n 个占位符, printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。(就是针对原语句也是一个参数)

7b342eaf4d6541dfb8be8b3827b3faeb.png

 

二:新学的%s,%e,%x的用法:

用于 printf 和 sprintf 等函数中,以表示一个字符串。当你在一个格式化字符串中使用 %s 时,你告诉函数期望一个指向字符数组(或字符串)的指针作为参数,以便在输出中替换 %s

其他的占位符用法

占位符列举
printf() 的占位符有许多种类,与 C 语⾔的数据类型相对应。下⾯按照字⺟顺序,列出常⽤的占位
符,⽅便查找,具体含义在后⾯章节介绍。
• %a :⼗六进制浮点数,字⺟输出为⼩写。
• %A :⼗六进制浮点数,字⺟输出为⼤写。
• %c :字符。
• %d :⼗进制整数。// int
• %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。
• %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
• %i :整数,基本等同于 %d 。
• %f :⼩数(包含 float 类型和 double 类型)。//float %f double - %lf
• %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 :⼗六进制 long int 类型。
• %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 类型。
• %% :输出⼀个百分号。

举几个例子:

%e是用来格式化输出浮点数的科学计数法表示的格式化字符。

%e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。

{
    double e = 12345.6666666666666666;
        printf("输出为%e", e);
    return 0;
}

%x :⼗六进制整数:

打印出为f:

{
    printf("输出为:%x", 15);
    return 0;
}

三:限定宽度

鉴于这两种输出的样子不一样,所以经行限定宽度:

printf输出首先右对齐

{
    printf("输出为:%5d\n", 123);
    printf("输出为:%-5d\n", 123);// printf("输出为:%-5d\n", 123); 这一句话是向左对齐
    printf("输出为:%d\n", 123);
}

 %*.*f 的使用规则:

printf("%*.*f\n", 6, 2, 0.5);: 这是printf函数的调用,用于输出格式化的字符串。这里的格式化字符串是"%*.*f\n",其中包含了两个星号(*)作为字段宽度和小数点后的精度的占位符。这两个占位符的值由后续的参数6和2提供。

第一个星号(*)对应的是6,它表示整个浮点数的总宽度(包括小数点和小数部分)应为6个字符宽。如果实际宽度小于这个值,输出将被空格填充以达到这个宽度。
第二个星号(*)对应的是2,它表示小数点后应显示两位数字。如果原始浮点数的小数部分有多于两位的数字,它们将被四舍五入到两位;如果少于两位,将用零填充。
{
    printf("输出为:%12.1lf\n", 12.12);
    printf("输出为:%*.*lf\n", 12, 1, 12.12);
}

%.[m]s 的详解:

{
    printf("输出为:%s\n", "abcdef");
    printf("输出为:%.3s\n", "abcdef");
}

四:又回到scanf

在VS中出现scanf和scanf_s的报错问题:

dd1529e08ae942f7abd8bbc890437e72.png

使用everything来操作:

下载链接     下载 - voidtools

搜索:newc++file.cpp

使用记事本打开,然后添加语句

#define _CRT_SECURE_NO_WARNINGS 1

下次打开就出现这段语句:

b5d341f3a3a74440875cad7a8d1bd501.png

输入的数值放在缓冲区域

一步一步读取,浮点数在内存中无法精确的保存。

针对输入-13.45e12# 0 的详解:

第一种还正常1:

{
    int a;
    float b;
    scanf("%d" ,&a);
    printf("输出为:%d\n", a);
    scanf("%f", &b);
    printf("输出为:%f\n", b);
    return 0;
}

 输入:  -13.45e12# 0

9f30d96d08364e84b60eaabd07ed1e60.png

首先读取到-13,后面到     .   停止赋值给小数0.45的12次方

但对于第二种:

{
    int a;
    float b;
    scanf("%d %f", &a, &b);
    printf("%d %f\n", a,b);
    return 0;
}

留下了问题:

b083e423c9ca4a11940fa06d6b0d0df3.png

一种解释:

首先,scanf 会尝试读取一个整数(%d),但输入字符串 -13.45e12# 0 开头部分 -13.45e12 并不是一个有效的整数格式,因为它包含了小数点和小数部分以及科学计数法表示。因此,scanf 无法正确读取整数,变量 a 将不会被赋予任何确定的值(它可能会保持之前的值,或者如果是局部变量且未初始化,则结果是未定义的)。

接下来,scanf 会尝试读取一个浮点数(%f)。由于 -13.45e12 是一个有效的浮点数表示(科学计数法),scanf 将能够成功读取这个值并赋值给变量 b。# 0 部分将被留在输入缓冲区中,因为 %f 格式说明符只读取一个浮点数。

然后,printf 函数将尝试输出变量 a 和 b 的值。由于 a 没有被成功赋值,它的值是未定义的,输出将是不确定的。而 b 的值将是 -13.45e12,即输入的浮点数。

因此,如果 a 变量没有被正确初始化,输出将是不可预测的,可能会是垃圾值(对于 a)和 -13.45e12(对于 b)。如果 a 变量有默认值(比如全局变量或静态变量在某些编译器和设置下可能有0作为默认值),那么输出可能会是这个默认值和 -13.45e12。

第二种解释;

int a; float b; - 这两行声明了两个变量,一个是整数类型的变量a,另一个是浮点数类型的变量b。

scanf("%d %f", &a, &b); - 这行代码使用scanf函数从标准输入中读取两个值,一个整数(%d)和一个浮点数(%f),并将它们分别存储到变量a和b中。&a和&b分别表示变量a和b的地址。

printf("%d %f\n", a,b); - 这行代码使用printf函数将变量a和b的值打印到标准输出。%d和%f分别表示打印整数和浮点数,\n表示换行。

在你提供的输入 -13.45e12# 0 下,会发生以下情况:

-13.45e12#会被读取为一个浮点数,并且scanf函数在解析时会遇到无效字符#,此时解析停止。由于scanf在解析时会将无效字符留在输入缓冲区中,所以#会保留在输入缓冲区中而不被消耗掉。

0会被成功读取为一个整数,并存储在变量a中。

因此,由于无效字符导致scanf函数解析中断,浮点数-13.45e12#不会被正确赋值给变量b。在printf函数中,变量a的值是0,而变量b由于没有被正确赋值,所以其值在此时是未定义的。因此,输出结果是 0 未定义。

主要就是读取错误,以后不这样写就ok了

 

scanf有返回值:

ret就是输入的放回值:0e8b1ad3b2c44c7382bf52969d405333.png

scanf里%c跳空白字符,

scanf里使用占位符%c,要多留个心眼——,空白字符会被吃掉:

8aff1448507f4497a9f38637bfdf4083.png

下面这种情况下就不会读取到数据:

9d4be097c90b471692a0266c682255c4.png

但可以改进%c前面加   空格,也嫩达到效果

dc359cdf50ba4529b4df3253ba1deb0a.png

scanf里使用%s,遇到空白字符会停止读好之后,存储到变量里后会自动存储'\0'

所以使用%[m]s来限制输入长度:

{
    char arr[5] = {0};
    scanf("%4s", arr);
    printf("%s", arr);
    return 0;
}

7447c9ab33034fb7b2637e297e266546.png

 赋值忽略符

%*c(如图示)

dcde76c324214e4386e26f5d0e58be4f.png

 创建变量要给初始值

这意味着它们可能包含任意的垃圾值,这样的变量可能会导致程序的不确定行为,甚至是错误。

五:if语句

执行流程:

5f269353bd2e488892eee9a5fdf6433a.png

#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num % 2 == 1)
 printf("%d 是奇数\n", num);
 else
 printf("%d 是偶数\n", num);
 return 0;
}

 if后面默认是认定一条语句,需要一个逻辑控制多条语句这样弄:

f7e4cf7cb4c04c1aba1ea4e123d3de9a.png

嵌套if   else

4617f3006e7e4462bfde2f0b1e818550.png

无限嵌套:

0050c70d241b44c1bce7a9d83eef1fb6.png

{
	int age = 0;
    scanf("%d", &age);
	if (age < 18)
	{
		printf("青少年");
	}
	else if (age<=44)
	{
		printf("中年");
	}
	else if (age<=59)
	{
		printf("中老年");
	}
	else if (age<89)
	{
		printf("老年");
	}
	else
	{
		printf("老寿星");
	}
}

转化为:控制一个语句

{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("青少年");
	else if (age <= 44)
		printf("中年");
	else if (age <= 59)
		printf("中老年");
	else if (age < 89)
		printf("老年");
	else
		printf("老寿星");
}

else悬空问题:

c8f1b85f55a44a70afe5942fdcc54251.png

else 与最近的if进行匹配,(O_o)??什么都不会输出

干干干这篇文章三个小时半了

下次还是得写简洁点

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用docker-tc对host容器进行限流

docker-tc是一个github开源项目&#xff0c;项目地址是https://github.com/lukaszlach/docker-tc。 运行docker-tc docker run -d \ --name docker-tc \ --network host \ --cap-add NET_ADMIN \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /var…

通过vite创建项目

一、VUE3官网 Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org) 二、通过Vite创建项目 1、在cmd窗口下&#xff0c;全局安装vite //使用国内镜像源 npm config set registryhttps://registry.npmmirror.com//安装最新版vite npm install -g vitelatest Vite | 下一代…

阿里云、腾讯云、华为云优惠券领取攻略

随着云计算技术的日益成熟和普及&#xff0c;越来越多的企业和个人开始选择使用云服务商来满足自己的数据存储、计算和处理需求。阿里云、腾讯云、华为云作为国内领先的云服务商&#xff0c;提供了丰富多样的云产品和服务。而为了吸引更多用户&#xff0c;它们也时常会推出各种…

4.4学习总结

一.线段树概念 一.定义: 线段树是一种二叉搜索树&#xff0c;而二叉搜索树&#xff0c;首先满足二叉树&#xff0c;即每个结点最多有两颗子树&#xff0c;并且是一颗搜索树&#xff0c;我们要知道&#xff0c;线段树的每个结点都存储了一个区间&#xff0c;也可以理解成一个线…

文件系统监视库(watchdog)

Python Watchdog库是一个用于监视文件系统变化的Python第三方库。以下是关于Watchdog库的详细介绍&#xff1a; 功能&#xff1a;Watchdog库能够监控文件和目录的创建、修改、删除和移动等操作。它通过使用底层原生API&#xff08;如Windows的ReadDirectoryChangesW、Linux 2.6…

Golang学习笔记

Golang学习笔记 安装Golang 来源&#xff1a;linux 安装 golang - 知乎 (zhihu.com) 由于我用的是linux系统&#xff0c;所以本文采用linux的安装方式介绍&#xff0c;如果你使用的是Windows/Mac 也可以看下该文章&#xff0c;或者自己去下列地址进行操作。 Download and in…

react中配置webpack:使用@代表src目录

在vue的项目中可以使用表示src目录&#xff0c;使用该符号表示绝对路径&#xff0c;那么在react中想要使用怎么办呢&#xff1f; 在react中使用表示src目录是需要在webpack中配置的&#xff0c;在核心模块node_modules-》react-scripts-》config-》webpack.config.js中搜索找到…

基于SSM的品牌银饰售卖平台(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的品牌银饰售卖平台&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring …

Windows11下Docker使用记录(一)

Docker使用记录&#xff08;一&#xff09; 简单介绍Docker安装Docker 常用命令Docker 可视化Docker 使用GPU可视化rviz、gazebo 在进行ROS项目开发时&#xff0c;如果只有一台Windows电脑&#xff0c;我们可以考虑使用WSL或Docker来搭建ROS环境。在尝试了两种方式后&#xff0…

代码随想录第31天 | 455.分发饼干 、376. 摆动序列、53. 最大子序和

一、前言 参考文献&#xff1a;代码随想录 今天的内容是贪心算法&#xff0c;这个算法分为两个极端&#xff0c;一个极端是很简单&#xff0c;靠常识就可以解出来&#xff0c;另外一个是&#xff0c;你怎么想也想不出来&#xff0c;只能看题解的那种。 and 对第一天和第二天…

Spring源码解析上

spring源码解析 整体架构 defaultListableBeanFactory xmlBeanDefinitionReader 创建XmlBeanFactory 对资源文件进行加载–Resource 利用LoadBeandefinitions(resource)方法加载配置中的bean loadBeandefinitions加载步骤 doLoadBeanDefinition xml配置模式 validationMode 获…

树的基本概念与二叉树

文章目录 树的基本概念与二叉树一、树的概念和结构1. 树的概念2. 树的相关概念 二、树的存储1. 左孩子右兄弟表示法2. 双亲表示法 三、二叉树1. 特殊的二叉树1.1 满二叉树1.2 完全二叉树 树的基本概念与二叉树 一、树的概念和结构 1. 树的概念 树是一种非线性的数据结构,它是…

Liunx进程信号

进程信号 进程信号什么是信号liunx信号种类 前后台进程前后台进程的概念 进程信号的产生键盘产生 阻塞信号信号的捕捉用户态和内核态 信号的捕捉函数 进程信号 什么是信号 信号是Unix、类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式。它是一种异步的通知…

计算机专业,不擅长打代码,考研该怎么选择?

考研其实和你的代码能力关系不大 所以在选学校以前可以看看有哪些学校复试是要求上机撸代码的&#xff0c;可能会要求比较严 初试真的不用担心代码问题&#xff0c;我也是基本零编程能力就开始备考考研的... 本人双非科班出身备考408成功上岸&#xff0c;在这里也想给想考40…

先登杯·14天创作挑战营·第④期~ 等你来战!

文章目录 ⭐️ 活动介绍⭐️ 活动详情⭐️ 活动奖品⭐️ 活动流程​⭐️ 评审规则⭐️ 报名&投稿注意事项⭐️ 活动组织 ​ 活动报名入口&#xff1a;https://bbs.csdn.net/topics/618374514 本次活动与官方活动及其他博主的创作型活动并不冲突&#xff01; ​ ​ ⭐️…

练习 22 Web [极客大挑战 2019]BuyFlag

php弱类型比较&#xff0c;注意Cookie值&#xff0c;php利用数组赋值进行绕过,科学计数法 很明显是弱类型比较&#xff0c;之前的练习题已经遇到过 构造password404adsffd&#xff0c;后面随便什么字母都行 然后 money100000000 然后在student这里卡了很久&#xff0c;post…

python解决既约分数(gcd)

题目&#xff1a; 如果一个分数的分子和分母的最大公约数是1&#xff0c;这个分数成为既约分数。例如3/4、1/8、7/1、都是既约分数。请问&#xff0c;有多少个既约分数&#xff0c;分子和分母都是1到2020之间的整数&#xff08;包括1和2020&#xff09;&#xff1f; 分析&#…

Leetcode 17.电话号码的字母组合

题目 思路 输入的digits有几个数就有几层。 一层中有几个数则取决于输入的数字对应的字母有几个。 1.确定递归函数的返回值及参数&#xff1a; 其实参数不是一开始就确定好的&#xff0c;而是你在写递归函数的时候缺啥&#xff0c;就往进去传啥。 这里我就直接全部写出来。…

基于单片机的智能报站系统仿真设计

**单片机设计介绍&#xff0c;基于单片机的智能报站系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能报站系统仿真设计概要是关于采用单片机技术实现公交车报站功能的系统设计概述。以下是对该设计的…

基于Android studio的二手交易平台--原创

&#x1f345;文章末尾有获取完整项目源码方式&#x1f345; 目录 一、实现介绍 视频演示 1.1 启动页实现 1.2登录页 1.3注册页 1.4忘记密码 1.5首页 1.6发布页 1.7我的发布 1.8我的收藏 1.9详情页 1.10修改页面 1.11我的页面 ​编辑 二、获取源码 一、实现介…