震惊!算法题中输入时加getchar()的原因竟是因为它!......

Unix/Linux系统编程核心原理与实践指南 系统编程是开发者与操作系统内核直接交互的技术领域,涉及进程管理、文件I/O、内存操作等核心机制。通过系统调用接口,程序可以访问底层硬件资源,实现高效的资源管理和进程控制。Unix/Linux系统以其透明性和模块化设计著称,遵循'万物皆文件'的哲学,通过文件描述符、信号处理等机制实现系统级功能。在现代计算环境中,这些原理支撑着容器技术、高性能服务器等关键应用。掌握fork()的写时复制、文件描述符共享等机制,能有效解决多进程环境中的竞态条件和性能优化问题,是开发可靠系统软件的基础。 阅读详情

起因:

今天在做一道跟栈有关的简单题,发现下面有这样一行提示
奇怪的提示
在打完代码后调试报错,第一个循环总是不显示。在这里插入图片描述
在经过研究后我发现,原来是cin后的换行符被getchar()读到了,导致没法按照预期要求得到结果。
在这里插入图片描述

解决方法:

按照我的要求,如果想要cin后的getchar执行的话;那么就需要把cin后的那个\n给忽略掉。
有以下两种方法:
1.多使用一个getchar()把这个换行读了
2.使用库函数cin.ignore()
cin.ignore()函数是C++标准输入流(cin)中的一个方法。
cin.ignore()函数中有两个参数,分别为数值型的 a 和字符型的 ch ,即cin.ignore( a, ch )。
它表示从输入流 cin 中提取字符,提取的字符被忽略,不被使用。而每抛弃一个字符,它都要进行计数和比较字符:如果计数值达到 a 或者被抛弃的字符是 ch ,则cin.ignore() 函数执行终止;否则,它继续等待。

C语言数据类型底层原理:内存布局、修饰符语义与跨平台实践 C语言数据类型本质是程序员对内存单元的声明式约定,而非抽象语法符号。其核心在于二进制表示(如补码)、宽度约束(由ABI与硬件自然字长共同决定)及修饰符语义(signed/unsigned决定解释方式而非存储内容)。理解sizeof运算符的实测能力、<limits.h>定义的实现相关边界、以及<stdint.h>提供的精确宽度类型(如uint8_t),是保障嵌入式系统资源效率、网络协议字节一致性、金融计算精度可靠性的技术基础。本文聚焦int、char、float三大类型在真实编译环境中的行为差异,揭示类型选择 阅读详情

相关推荐

手把手教你分析解决Innovus DRC Violation 和Antenna Effect Violation

数字IC后端设计培训教程之手把手教你分析解决Innovus DRC Violation 和Antenna Effect Violation

weixin_37584728的博客 2942

C++中,cin 、scanf 和 getchar 配合输入字符串的问题

发现一个C++输入字符时的问题,这里做个记录。 输入测试数据: #CHENQI +CHENHA $ cin 和 getchar 配合,带输入优化代码: #include <cstdio> #include <iostream> #include <string> using namespace std; #define maxn 50001 int m...

weixin_40072949的博客 939

R语言的下载、安装及环境配置(Rstudio&VSCode)

R for Windows是一个免费的用于统计计算和统计制图的优秀工具,是R语言开发工具。它拥有数据存储和处理系统、数组运算工具(其向量、矩阵运算方面功能尤其强大)、完整连贯的统计分析工具、优秀的统计制图等功能。提供的图形界面,可以在其中访问控制台、创建脚本或安装其他软件包。

zegeai的博客 2万+

密码不回显函数(二)

值得注意的是前面两个函数都是从键盘读入数据!     还有getchar是很值得研究的:getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了。     而getch()和getche()是conio.h中的库函数,它的作用是从键盘接收字符。getchar带有显示。     与前面两个函数的区别在于:

XuLujun优快云 900

国内网络环境下Leaflet加载OpenStreetMap地图的5种替代方案(附可用瓦片地址)

本文针对国内网络环境下Leaflet加载OpenStreetMap地图的常见问题,提供了5种可用的瓦片替代方案,包括OpenStreetMap.fr HOT、OpenStreetMap.de、CartoDB、Stamen和Thunderforest,并附上详细的代码示例和选择建议,帮助开发者解决地图加载问题。

qsc901234的博客 1707

亿图图示(edrawmax中文版) v10.1.7pjb

edrawmax中文名叫做亿图图示,是一款非常棒的综合图形图表设计软件,既能实现流程图、架构图、工程图、思维导图等数百种专业领域图形图表的绘制,又能提供一个白板进行头脑风暴和任意编排,轻松实现数据和创意的可视化呈现。软件支持Windows、Mac、Linux及网络版,一端创作,多端同步,从而为跨端办公绘图提供新的解决方案,还兼容常用文档类的办公软件格式,包括图片、Office、PDF、Visio、Html、SVG等,尽可能的在文件格式这块满足用户多方面需求。软件支持创建260多种图表类型,拥有超过12500

qq_43293214的博客 1万+

C++中cin后面有时候为什么要加个getchar()

空白符:指回车和空格。 cin不会丢弃空白符,但是>>会跳过空白符。于是该行中最后输入的回车符就会被保存在cin的缓冲区中,在下次输入时会首先从缓冲区中取出这个空白符,这就会影响下次输入。所以一般在涉及到多行字符串输入时:就需要使用getchar()将这个空白符取出来,让它不会干扰后续输入。 ...

白给、少年 1882

ROS探索篇(一)在Gazebo中实现移动机器人仿真与环境搭建

$x+y=z$

weixin_52029211的博客 4623

何时需要getchar()接收换行符

做题的时候有时会用到getchar()接收换行符,然而让人困惑的是一般使用scanf("%s", str)这样的形式读取字符串的时候似乎并没有考虑这个问题。网上通常会给你讲大道理缓冲区啥的,然后听懂后自己得不得的出结论全看天赋(摊手),所以在这里直接下结论了: 1.一个scanf后的确有回车在缓冲区里,但是scanf("%s", str)这样的不会把之前留下的换行符读取掉(就是无视了)。这就是平时...

baidu_41932584的博客 3648

大数据分析案例-基于决策树算法构建世界杯比赛预测模型

本项目旨在分析往届世界杯比赛数据,找出规律,最后使用决策树算法构建世界杯比赛预测模型,给出两个球队即可预测胜率,可以给爱看球的小伙伴提供一个参考。本次实验我们使用了2018年及其之前的世界杯比赛数据,通过建立决策树模型,模型准确率为82%,接着我们使用该模型预测了2022年世界杯的5场半决赛及决赛,模型准确率也是接近80%的,说明模型效果还是很不错的。心得与体会:通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。

m0_64336780的博客 1万+

SAP 针对不同行业(制造业、零售业、金融业)推出了专属的云解决方案,以下是各行业的核心方案与特点

SAP推出行业专属云解决方案:制造业(SAP Digital Manufacturing Cloud)提供AI排产与质量预警,降低缺陷率;零售业(S/4HANA Cloud零售版)实现AI预测补货与全渠道库存同步,减少浪费;金融业(Business ByDesign)支持合规自动化与实时风控,降低审计成本。各方案均采用云原生架构,典型案例显示实施效果显著。

金牌架构师 494

C++:getchar()函数的用法

一、简介 当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区输入流中。直到用户按回车为止。当用户键入回车之后,getchar才开始从输入流中每次读入一个字符 注意! ①使用getchar()时,用户在键盘输入一行的数字,当遇到回车符时,这一行会被存进输入流。 ②如果没有用循环的话,getchar()每次只能从输入流中读取一个字符 ③getchar()只能读取输入流回车符前面的字符,不可以读取回车符! ④如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续

Warddamn的博客 1万+

ABAP GIT 作用介绍

总结起来,ABAPGit 是一个强大的工具,它通过将 SAP ABAP 项目与 Git 版本控制系统集成,大大提高了代码管理的效率和团队协作的质量。在 ABAPGit 出现之前,ABAP 代码的版本控制和团队之间的协作主要依赖于手工操作或者是 SAP 自带的版本控制工具,这些方式效率低下,且难以实现高效的代码管理。使用 ABAPGit,SAP 项目团队不仅可以提高代码管理的效率和质量,还可以通过 Git 的强大功能实现高效的团队协作和代码审查。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 842

震惊!C++用不同的方式输入,时间相差20倍!原因竟然是……

C++ 4种输入方式的快慢

The_OIer的博客 3033

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

关于fflush(stdin)与getchar()清除缓冲区的优劣。

在清除缓存区时的三种方式

Heart_Breezer的博客 784

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

c语言:为什么输入int型数据后无法输入字符类型数据

场景: 有人在看一下程序代码时对getchar用法产生怀疑,于是来问叶子,叶子尝试注释后发现无法输入char类型字符,彻底震惊了叶子,于是开始了调试之旅。 问题描述: 原例中在输入数值型数据后使用getchar,然后输入字符型,成功运行(其实也就是解决方法啦);注释掉后输入完字符型和所有打印内容输出后直接程序结束运行。 (原例) (注释后) 错误锁定: 正常情况char类型可以输入: 可以分两次输入数值型: 但是一次数值一次字符类型就吞了字符型: 所以猜测是数值对字符会有什么影响导致 原

jinyeran的博客 1579

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

震惊!用了此方法后,TLE的代码AC了!

前言昨天帮Sdywolf查代码…… 解法和标算一模一样,而且看不出常数大的地方,但是就是TLE了 经过一番检验,发现竟然是读优的问题!正文原来的读优一直调用getchar()…… 以为挺快的,没想到会TLE Manchery大神自己定义了一个与getchar()功能相似的函数:inline char nc(){ static char buf[100000],*p1=buf,*p2=

linkfqy 3341

[笔记]scanf的使用(主要是针对char)

学的是C++,用cin cout也用的很顺溜,写自己的类时重载“<<”与“>>”运算符也很爽,但是发现在刷算法竞赛题时,cin cout很没优势,输入量大时一道题我用cin cout要50ms,用scanf printf只要10ms、20ms,这个就差的太大了时间都花在输入输出上也是很郁闷。于是开始使用C的输入输出标准。输出很正常,也可以轻松更改doub...

weixin_30617695的博客 1366

读入优化新姿势——学习笔记

震惊!99.9%的oier都不知道。用了此方法,暴力立马变标算!最近学习了一个新的函数fread,可以从文件中整块读入信息,速度很快。基于这个函数,我们可以写一个新的getchar():inline char gc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,1

Lynstery's blog 734

更快的读入优化

原博客:震惊!99.999%的OIER都不知道!我竟然学了假读优!竟然有这样的读优!—by Sdywolf 原来的读优是这样写的: int _read(){ int sum=0;char ch=getchar(); while(!(ch&gt;='0'&amp;&amp;ch&lt;='9'))ch...

小灰狼与大白兔的博客 1034

更快的读入优化fread

更快的读入优化fread。

ZigZagK的博客 1万+

实名吐槽CF!!!

震惊!x*10比(x&amp;lt;&amp;lt;3)+(x&amp;lt;&amp;lt;1)快近500ms!! CF的编译器是什么鬼,神tm有毒吧??? 这是一个悲伤的故事—— 今天上午辛辛苦苦肝了这题,结果T了。。。 什么玩意儿啊,我明明和标算一模一样的两个log啊,神tm怎么就T了。。 以为是线段树写丑了,然后我就不停卡常,1h后终于过了test 18,然后T在了test 24。。 还看了别人的代码,为什么vecto...

ymzqwq的博客 261

C++的 IO 流

本文系统介绍了C/C++中的输入输出机制。首先回顾了C语言的scanf/printf函数及其缓冲区原理,然后阐述了"流"的概念及其在C++中的实现方式。重点讲解了C++标准IO流(cin/cout)和文件IO流(ifstream/ofstream)的使用方法,包括二进制和文本文件的读写操作。文章还介绍了stringstream类在数据类型转换和字符串处理中的应用,对比了其与C语言itoa/sprintf函数的优势。最后通过实例演示了如何利用流操作实现结构体数据的序列化和反序列化。全文涵盖

qq_72916130的博客 801

cin,gets()区别,getline(),getchar()

下面通过两个例子说明一下此cin和gets()区别:#include&lt;iostream&gt;using namespace std;int main(){      char str[20];      cin&gt;&gt;str;      cout&lt;&lt;str&lt;&lt;endl;      return 0;}输入:abc[空格]abc输出:abc#include&l...

Lison_Zhu's Blog 1142

C++中为什么有时候会出现使用cin后在再使用getchar()会没有用

C++中为什么有时候会出现使用cin后在再使用getchar()会没有用? 比如下面这个程序: #include using namespace std; int main(){ int x; cout cin>>x; char *u=(char*)malloc(x*sizeof(char)); cout char c; c=getchar(); int k=0; whi

LLXLQY的博客 4387
上一篇: C++提高算法速度的方法
下一篇: C++中的cctype头文件
Andy in boots
博客等级 码龄7年 73粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值