scanf(“%s“)真的只开读入字符串大小就可以了吗??

文章目录

  • 前言
  • 还原过程
  • 计算机程序背后的故事
  • 总结瞎逼逼

在这里插入图片描述

前言

艹艹艹艹艹艹!!!!!!!老子没想到没想到,靠!
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
本人刚刚在做树链剖分“染色”一题的代码重构,上午打爆了是在调不出来,只能从头来过
染色
bb一句:对于数据结构这种题,一旦打完后一到两个小时之内静态,动态查错都没有调出来
就应该果断删掉重构代码,重新想过(更好的其实是休息一会再调才不会跳入固定思维里面)

重构完后,我发现自己一遍过样例!!
在这里插入图片描述
但是就发现了贼nm离谱的运行,人直接给我整傻掉
在这里插入图片描述

还原过程

先看看错误代码把…
博主把该有的操作和答案操作都去掉了,让我们直接来欣赏这份代码大礼包

友情提示:该题目的操作是Q或者C只有一个字符哦

char opt[1]; int a, b, c;
for( int i = 1;i <= m;i ++ ) {scanf( "%s %d %d", opt, &a, &b );if( opt[0] == 'C' )scanf( "%d", &c );
}

看着是不是完美无瑕的亚子?!!!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
别急着往下翻,再想想
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
你觉得这份代码没问题吧?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
真的没有问题吗?
.
.
.
.
.
.
.
.
.
.
.
.
.
有的吧?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
你发现了吗?!!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
你怀疑自己之前的想法了吗?你还坚信是对的吗?
.
.
.
.
.
.
.
.
.
.
.
.
.
尽管一瞬的怀疑,可你马上否定,仍觉得这份代码没错的,对吧?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
你开始产生怀疑了?
.
.
.
.
.
.
.
.
.
.
.
.
越来越怀疑
.
.
.
.
.
.
.
.
.
.
.
.
你越发觉得代码有点问题了?
.
.
.
.
.
.
.
.
.
.
.
可究竟错哪儿了?
.
.
.
.
.
.
.
.
.
.
.
.
冥冥之中,直觉开始作祟,有问题,却说不上来在哪?
.
.
.
.
.
.
.
.
.
.
.
.
代码错误的原因究竟是?
.
.
.
.
.
.
.
.
.
.
.
.
.
想不到
.
.
.
.
.
.
.
.
.
.
.
.
开始猜测各种情况
.
.
.
.
.
.
.
.
.
.
.
慢慢的,发现了一个比较靠谱的猜测
.
.
.
.
.
.
.
.
.
.
.
.
.
越发相信自己的猜测
.
.
.
.
.
.
.
.
.
.
.
.
现在怎么看,这份代码都有错了
.
.
.
.
.
.
.
.
.
.
.
.
坚持你的想法吗?你的想法是不是问题所在?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
盲点,你发现了华生!!!

但!!!!!!!!!
准确来说,这份代码错了又没错
在这里插入图片描述
上图甩!走你┏ (゜ω゜)=☞
且看傻逼博主一步一步搞蒙自己
.
.
.

在这里插入图片描述
没错运行程序表明,死循环了。
死循环了???
死循环了!!!
怎么可能?!!
在这里插入图片描述
我想:换种写法试试,爷还不信了?
在这里插入图片描述
又好了???
在这里插入图片描述
结果显而易见了,肯定是forforfor循环的iii出问题了,
但是爷仔细一看,没啥啊,这不正常进行的吗,每个操作都被读入了
按道理iii应该老老实实的++++++,可为何迟迟不到mmm

早已掌握了分布调试诀窍的我马上开始printfprintfprintf分步康康
在这里插入图片描述
在这里插入图片描述
iii为什么一直等于111!!!!
在这里插入图片描述
情况一出现凭借多年踩雷从未避开过的经验,我立马感知到可能是%s\%s%s字符串劈里啪啦一堆猫病,并竟平时没少在那一块因为输入的多个空格多个换行栽跟头

但是以为这点小知识还是有的爷简单分析一波,%s\%s%s输入字符串,遇到空格换行就停,不会读入空格换行,数组从000下标开始,是前闭后开[0,1)[0,1)[0,1),一个字符装进去刚刚好啊

这种玄学RE,还是应该请教一下身边的621同学,她刚开始看到我对她一步步演示也是一个吃惊,可后来马上夺过我的键盘,先看变量定义是否用了iii,再用jjj来替换了一下iii,发现仍是这样

在一旁思考了小会儿,倏地进行了一个修改

char opt[15];

在这里插入图片描述
程序成功结束,果然是字符串这方面的问题,意料之中,但是optoptopt数组的大小却让我意料之外
接着,我马上缩小数组范围,继续观察

在这里插入图片描述
在这里插入图片描述
原来222都能接受,也就是说必须至少要开字符串长度大小+1+1+1

可这是为什么?为什么!

在这里插入图片描述

因为换行,空格这些都会对字符串造成一定影响,所以我先猜测可不可能是%s\%s%s后面的那个空格对输入造成了影响,话不多说,立马实践
在这里插入图片描述
很不幸,实践表明,后面的空格并没有对它产生任何影响
在这里插入图片描述
那么就只剩下一种可能了
尽管不可思议
却仍然可能
真是让人难以置信
在这里插入图片描述

计算机程序背后的故事

没错!就是,只能是,也必须是,输入一行后的换行对字符串造成了影响

可其实不然,这个表述有点歧义

因为字符串的确正确输入了,没有多的空格和换行

那换行怎么造成了影响?

因为!

换行符被变量iii“吸收”
!!
不可思议吧

可似乎只有这样才能解释,为什么iii迟迟不++++++,而输入的操作能正确执行

在这里插入图片描述
在这里插入图片描述

实践再次证实了我的想法

换行符真的被iii读进去了

在这里插入图片描述在这里插入图片描述
最后我得出我的想法,与君共享
.
.
.
.
.
.
.
因为optoptopt只开到了[1][1][1],所以相当于只申请了000这个空间,用于储存输入操作字符QQQ或者CCC
也就意味着没有申请多余的空间给之前先读到的换行符
那么它就只能漂泊在外
但是这偌大的空间它不可能找不到位置放下自己
所以它随意乱跳看上了变量iii,私自占有了iii,将自己的值000(ASCII码)赋给了iii
从而导致了iii的死循环

但是为什么偏偏是iii呢?系统独特设定?
我觉得不然,可能只是这份代码在这台电脑上的运行是赋值到iii
万一在其它地方,它又可以赋值到a,b,ca,b,ca,b,c甚至是其他变量
此时就算换行符赋值了,后面的输入操作也会覆盖掉,并不对结果造成干扰
所以可能本地跑RE,交上去万一AC了呢

.
.
.
.
.

当然这些都是只是拙见,毕竟我还是个小蒟蒻

总结瞎逼逼

感觉一步一步过来就像完成了一个简略的科学探究应该有的步骤

发现问题

寻找问题源头

合理分析

提出猜想

实践证明

总结归纳

虽然目前我也不造这个想法对不对
在这里插入图片描述
计算机真的很神奇呢,里面有很多自己的小规则,这种看似玄学的背后竟然是


.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
还是玄学
在这里插入图片描述
我要是有什么错误,欢迎指出,非常感谢能得到各位dalao的指导

别口口马我
在这里插入图片描述

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

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

相关文章

P5299-[PKUWC2018]Slay the Spire【dp】

前言 正题 题目链接:https://www.luogu.com.cn/problem/P5299 题目大意 有2n2n2n张牌&#xff0c; nnn张强化牌&#xff0c;每张上有一个正整数x(x>1)x(x>1)x(x>1)&#xff0c;如果使用后之后的每一张攻击牌伤害都会乘上xxx。nnn张攻击牌&#xff0c;每张上有一个正…

asp.net core2.2 多用户验证和授权

asp.net core2.2 用户验证 和授权有很详细和特贴心的介绍&#xff0c;我感兴趣的主要是这两篇&#xff1a;cookie身份验证基于角色的授权我的项目有两类用户&#xff1a;微信公众号用户&#xff0c;用户名为公众号的openid企业微信的用户&#xff0c;用户名为企业微信的userid每…

P1494 [国家集训队]小Z的袜子

P1494 [国家集训队]小Z的袜子 题意&#xff1a; 有一个长度为 n 的序列c[i] 。现在给出 m个询问&#xff0c;每次给出两个数l,r &#xff0c;从编号在 l 到 r 之间的数中随机选出两个不同的数&#xff0c;求两个数相等的概率。 题解&#xff1a; 很明显&#xff0c;莫队算法…

一文带你快速读懂.NET CLI

dotnet cli 是 .Net Core 功能中最有用的特性之一。在这篇文章里&#xff0c;我们将介绍几个.Net OSS 工具是如何使用 dotnet cli&#xff0c;并介绍如何在日常开发中使用新的 cli 工具。正文关键要点dotnet cli 使得基于. Net 项目的自动化和脚本编写变得非常简单&#xff0c;…

[POJ 3164]Command Network(最小树形图,朱刘算法)

文章目录titlesolutioncodetitle solution 读完翻译后&#xff0c;很明显就是个朱刘算法的板子题 最小树形图&#xff0c;就是给出一个带权有向图 从中指定一个特殊的结点 root 求一棵以 root 为根的有向生成树 T&#xff0c;且使得 T 中所有边权值最小 简单来说&#xff0c…

ASP.NET Core 3.0:将会拥有更少的依赖

在ASP.NET Core项目中&#xff0c;我们使用一个叫做Microsoft.AspNetCore.App的综合包。它也被称为ASP.NET Core Shared Framework&#xff0c;在ASP.NET Core Shared Framework之中包含了很多依赖项&#xff0c;它能满足一般应用的需求。但是如果你查看它的依赖项&#xff0c;…

CSP2021NOIP2021游记

CSP Day -? 初赛 初赛考前没怎么复习&#xff0c;反倒是理直气壮的翘了一周晚修&#xff08;虽然后面就一直翘了&#xff09;。 开考之后才发现要拿那几张纸&#xff0c;监考让我考完再出去拿。 选择题很简单&#xff0c;没有啥犹豫的写完了&#xff0c;第一道读程序写结果好…

微软上线Try .NET,支持在浏览器运行C#代码

微软Try .NET项目近期上线&#xff0c;这一项目允许用户通过浏览器运行和编写C#代码&#xff0c;同时还支持完整的代码提示。用户可以通过访问这一项目官网&#xff08;点此进入&#xff09;对Try .NET这一项目进行简单了解。该项目允许开发人员在浏览器中运行和编辑C#代码片段…

[LOJ]体育成绩统计 / Score (无脑模拟,没有脑子,就是上!)

题目 好久没敲过恶心的模拟题了&#xff0c;莫名有点怀念是什么鬼&#xff0c;我还记得我的zamjena 没啥想说的&#xff0c;这道题就是没智商有码力的 纯粹是纪念一下今天上午直接肝了的两个半小时&#xff0c;真的一点思维都不需要有&#xff0c;直接上&#xff01;&#xff0…

程序员修仙之路--设计一个实用的线程池

菜菜呀&#xff0c;我最近研究技术呢&#xff0c;发现线上一个任务程序线程数有点多呀CEO,CTO,CFO于一身的CXOx总&#xff0c;你学编程呢&#xff1f;菜菜作为公司总负责人&#xff0c;我以后还要管理技术部门呢&#xff0c;怎么能不会技术呢CEO,CTO,CFO于一身的CXO&#xff08…

Code Names

Code Names 题意&#xff1a; 如果一个字符串通过交换两个位置可以得到另一个字符串&#xff08;也就是两个字符串只有两个位置不一样且为交换关系&#xff09;&#xff0c;我们称这两个字符串为替代关系。 现在给出n个字符串&#xff0c;求一个集合&#xff0c;使得集合内的…

【2020牛客NOIP赛前集训营-提高组(第一场)题解】( 牛牛的方程式,牛牛的猜球游戏,牛牛的凑数游戏,牛牛的RPG游戏)

未完待续...T1&#xff1a;牛牛的方程式titlesolutioncodeT2&#xff1a;牛牛的猜数游戏titlesolutioncodeT3&#xff1a;牛牛的凑数游戏titlesolutioncodeT1&#xff1a;牛牛的方程式 title solution 因为浮点错误炸了70pts 这个三元一次不定方程呢&#xff0c;其实也没有…

程序员修仙之路-数据结构之 CXO让我做一个计算器

菜菜呀&#xff0c;个税最近改革了&#xff0c;我得重新计算你的工资呀&#xff0c;我需要个计算器&#xff0c;你开发一个吧CEO,CTO,CFO于一身的CXOX总&#xff0c;咱不会买一个吗&#xff1f;菜菜那不得花钱吗&#xff0c;一块钱也是钱呀这个计算器支持加减乘除运算就行&…

P5518-[MtOI2019]幽灵乐团【莫比乌斯反演,欧拉反演】

正题 题目链接:https://www.luogu.com.cn/problem/P5518 题目大意 TTT次给出A,B,CA,B,CA,B,C求以下三个式子 ∏i1A∏j1B∏k1Clcm(i,j)gcd(i,k)\prod_{i1}^A\prod_{j1}^B\prod_{k1}^{C}\frac{lcm(i,j)}{gcd(i,k)}i1∏A​j1∏B​k1∏C​gcd(i,k)lcm(i,j)​ ∏i1A∏j1B∏k1C(lcm(…

【2020牛客NOIP赛前集训营-提高组(第二场)】题解(GCD,包含,前缀,移动)

文章目录T1&#xff1a;GCDtitlesolutioncodeT2&#xff1a;包含titlesolutioncode(正解code补充在上面了)T3&#xff1a;前缀titlesolutioncodeT4&#xff1a;移动titlesolutioncodeT1&#xff1a;GCD title solution 非常水&#xff0c;看一眼就知道了 首先我们知道每一个…

.NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务

连着两天更新叙述性的文章大家可别以为我转行了&#xff01;哈哈&#xff01;今天就继续讲讲我们的.NET Core实战项目之CMS系统的教程吧&#xff01;这个系列教程拖得太久了&#xff0c;所以今天我就以菜单部分的增删改查为例来讲述下我的项目分层之间的协同工作吧&#xff01;…

[2020-11-23 contest]图(dfs剪枝),劫富济贫(字典树),小A的树(树形DP),游戏(贪心/斜率优化)

文章目录T1&#xff1a;图solutioncodeT2&#xff1a;劫富济贫solutioncodeT3&#xff1a;小A的树solutioncodeT4&#xff1a;游戏solutioncodeT1&#xff1a;图 【问题描述】 给你一个n个点&#xff0c;m条边的无向图&#xff0c;每个点有一个非负的权值ci&#xff0c;现在你…

P1742 最小圆覆盖

P1742 最小圆覆盖 题意&#xff1a; 给出N个点&#xff0c;让你画一个最小的包含所有点的圆。 题解&#xff1a; 先说结论&#xff1a; 最优解的圆一定是在以某两个点连线为直径的圆 或者 某三个点组成的三角形的外接圆 初始化将某个圆心定为第一个点&#xff0c;R0 枚举第…

Java实现非对称加密【详解】

Java实现非对称加密 1. 简介2. 非对称加密算法--DH&#xff08;密钥交换&#xff09;3. 非对称加密算法--RSA非对称加密算法--EIGamal5. 总结6 案例6.1 案例16.2 案例26.3 案例3 1. 简介 公开密钥密码学&#xff08;英语&#xff1a;Public-key cryptography&#xff09;也称非…

轻量级.Net Core服务注册工具CodeDi发布啦

为什么做这么一个工具因为我们的系统往往时面向接口编程的,所以在开发Asp .net core项目的时候,一定会有大量大接口及其对应的实现要在ConfigureService注册到ServiceCollection中,传统的做法是加了一个服务,我们就要注册一次(service.AddService()),又比如,当一个接口有多个实…