震惊!算法题中输入时加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三大类型在真实编译环境中的行为差异,揭示类型选择 阅读详情

相关推荐

prometheus 从入门到精通(史上最全)

Prometheus(由go语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。它可以监控主机,服务,容器,支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。原文链接:https://blog.csdn.net/qq_45277554/article/details/130917620时间序列数据。

流水_鱼鱼的博客 1万+

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

C++和蓝图1:Unreal Engine 中 C++ 与蓝图的桥梁

摘要: 本文介绍了Unreal Engine(UE)中C++与蓝图可视化脚本的结合机制,重点解析了宏系统(UCLASS、UPROPERTY、UFUNCTION)如何实现代码与蓝图的交互。相比Unity的纯C#脚本模式,UE的双轨制开发允许程序员用C++处理核心逻辑,同时通过蓝图让非程序员快速迭代。文章对比了两大引擎的编程范式差异,指出UE的反射系统和宏标记提供了更精细的控制,并给出了从Unity迁移到UE的具体思路。核心在于理解UE的混合编程优势:C++保证性能,蓝图提升开发效率,二者通过宏系统无缝协作。

qq_46348216的博客 1409

密码不回显函数(二)

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

XuLujun优快云 900

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2554

K-Means聚类算法 — 算法原理、质心计算、距离度量、聚类效果评价及优缺点

分类知识   分类是根据样本某些属性或某类特征(可以融合多类特征),把样本类型归为已确定的某一类别中。机器学习中常见的分类算法有:SVM(支持向量机)、KNN(最邻近法)、Decision Tree(决策树分类法)、Naive Bayes(朴素贝叶斯分类)、Neural Networks(神经网络法)等。   但当对海量数据进行分类时,为了降低数据满足分类算法要求所需要的预处理代价,往往需要选...

zhf的博客 1万+

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

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

白给、少年 1882

大华/华睿工业相机(摄像头)链接电脑,并用OpenCV打开

睿科是大华旗下机器视觉子公司,现在工业相机一般是华睿在产,要下载驱动程序,要到华睿官网哪里下载。由于我的电脑没有摄像头,所以摄像头序列化为0,电脑的第一个摄像头默认为0,序列号是0,1,2,3……,你是什么接口连接的就选择什么, 建议直接全选。我这里选择第二个,下载后点击安装,的你要点击识别右侧设置,设置。这个过程很简单,故不赘述。打开你的设备会在右边显示。

qq_48050838的博客 1万+

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

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

baidu_41932584的博客 3648

AD56XXR系列DAC驱动设计:SPI接口、寄存器配置与嵌入式工程实践

数模转换器(DAC)是嵌入式系统实现高精度模拟控制的核心器件,其性能取决于通信协议可靠性、寄存器配置准确性及硬件协同设计能力。基于SPI总线的电压输出型DAC广泛应用于工业控制、光模块偏置、传感器校准等场景,需兼顾静态精度、动态响应与低功耗特性。AD56XXR系列作为典型集成内部基准与多通道同步更新能力的12/14/16位DAC,支持轨到轨输出与灵活掉电模式,为资源受限MCU提供可移植固件范式。本文围绕SPI时序约束、16位指令字解析、LDAC同步机制及精度补偿策略展开,覆盖从硬件连接、初始化流程到量产级可

weixin_33481022的博客 612

【INMP441】 MEMS麦克风,让硬件“听得见”,更要“听得清”

INMP441是一款数字MEMS麦克风,采用PDM接口输出高质量数字音频信号。相比传统模拟麦克风,它具有高度集成、抗干扰强、功耗低等优势,支持通过时钟启停实现软件控制开关。该麦克风体积小巧但功能强大,内置MEMS传感器、ADC转换器等模块,适合智能音箱、语音遥控等应用。工程师可通过ESP32等主控芯片轻松连接INMP441,利用多麦克风阵列实现波束成形等高级功能。INMP441展现了数字音频采集的先进技术,为创客和智能硬件开发者提供了优秀的音频解决方案。

深耕CV 1538

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

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

Warddamn的博客 1万+

【数据集】1980-2020年(5年)土地利用分类数据-中国科学院

简介1980-2020年每五年土地利用数据-中国科学院

WW、forever的博客 3936

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

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

The_OIer的博客 3033

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

Heart_Breezer的博客 784

假人有限元模型

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

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

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

jinyeran的博客 1579

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

震惊!用了此方法后,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、付费专栏及课程。

余额充值