首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++cin输入错误导致死循环

C++cin输入错误导致死循环 今天在写代码时候遇到一个bug,也是在无意中发现,当我乱输入时候(乱敲键盘那种),程序会出现死循环。...简版: int a = 0; while(true) { cout <<"请输入数字"<< endl; cin>>a; } 看似一段简单代码,当胡乱输入时候就会导致程序死循环,无限打印...while(cin.fail()) { cout <<"请输入数字"<< endl; cin >> a; cin.clear(); //cin.clear()作用是清除cin错误状态...cin.ignore(); //cin.ignore()作用是忽略掉缓冲区内容,直到遇到EOF为止 } 网上还有使用cin.fail。...cin.fail()是判断cin状态,如果cin为错误状态则返回1,正常状态则返回0 目前我没有使用这个,但死循环确实不存在了。

1.4K21
您找到你想要的搜索结果了吗?
是的
没有找到

C++、Python、Rust、Scala 构建编译器差异性究竟有多大?

然后我与一个使用了C++团队比较,结果如我预料那样,由于有头文件,以及缺乏汇总类型和模式匹配支持,导致他们编译器大了30%。...我认为,微小差异也能反映出巨大问题,比如上面说过用Haskell编写编译器代码量不到C++一半。 ?...另一方面,由于她是独立完成,而且实现了许多额外功能,因此她在代码质量上只花费了最小限度经历,例如所有错误都会抛出统一异常(所以调试时需要进行栈跟踪),而不是像我们一样每种错误都给出特定错误类型和错误信息...C++团队想出了一个非常好设计,所以他们能用更少代码完成更多功能。 总的来看,3倍代码量似乎完全由不同设计决定导致,每个设计决定不同都导致了或大或小代码量增加。...抽象可以让代码在未来更容易扩展,或者能防止特定类型错误,但需要认真考虑,因为它可能会导致三倍代码量,增加理解和重构工作量,也让可能出现bug位置增加了三倍,导致测试和后续开发时间更少。

1.4K40

Opentelemetry——分析C++项目链接时循环依赖导致错误

链接出现了什么问题 原因猜想 解决方案 参考资料 在《Opentelemetry-Language APIs & SDKs-C+±Getting Started》一文中,介绍了如果编译一个可以发出Trace遥测数据C...分析过程 在执行完《Opentelemetry-Language APIs & SDKs-C+±Getting Started》中最后一条编译指令后,会报出如下错误: /usr/bin/ld: /home...::v1::sdk::common::internal_log::GlobalLogHandler::GetHandlerAndLevel()方法(因为这是C++项目,所以符号表是经过处理),它状态是...我们回到最开错误提示,需要梳理下它们关系 /usr/bin/ld: /home/fangliang/otel-cpp-starter/opentelemetry-cpp/build/sdk/src/...原因猜想 这个顺序似乎符合一种猜想: 链接opentelemetry_common时不知道opentelemetry_trace需要什么,导致后续链接opentelemetry_trace时找不到依赖

3100

AI智能分析开发中采用c++中文编码出现乱码是什么导致

EasyCVRAI智能分析版本在做研发时候,就受到了很多朋友关注,EasyCVR的人脸识别功能采用了Go语言,使用c/c++ 头文件和dll文件。...在C++ 中如果出现中文,会出现乱码问题,使用notepad++打开保存二进制文件,出现乱码。...image.png 正常情况选择UTF8编码正常显示: image.png 在计算机内部,所有的数据都是以二进制形式保存,在存储文本时,需要将文本文件信息都转换为二进制进行保存,而现实是将二进制转换为文本显示...ASNI:除了中国以外,其他许多国家页都制定自己编码标准。 Unicode:由于不同ANSI编码之间互不兼容,这样进行信息交互就会进行编码转换。...UTF-8:Unicode可以表示所有的字符,但是英文字符也与其他字符一样,使用两个字节进行编码,使得在保存英文文本时候会多出一倍存储空间,而大多数文本信息都是英文

1.5K20

你所不知道C和C++运行库

无聊,遂准备写一篇博客,介绍一下C和C++运行库,只因发现工作几年的人对此一知半解大有人在。 在使用VC构建项目时,经常会遇到下面的链接错误: ?...初学者面对这些错误常常不知所错:libcmt.lib是什么东西?msvcrtd.dll又是干吗用?在使用VC++时我们也常常对下面的运行库配置项感到疑惑,它们到底究竟是什么意思呢?...C++标准兼容C标准,但VC各版本将C++编译器使用C标准库与C编译器使用C运行库一起实现,它们使用相同运行库。...在开发过程中我们也会遇到如下图链接错误,LIBCD.lib究竟是何方神圣呢? ?...VC2005等更高版本编译器已经不再提供单线程版本,转而使用多线程版MSVCR80.DLL或libcmt.lib。 当遇到上述符号定义冲突链接错误时,可以选择忽略libcd.lib。

1.5K10

C++:无法解析外部符号问题 与 头文件包含注意要点

我有些抓不到头脑,无法解释外部符号是编译器无法找到具体实现所导致,这个观点我坚信是没有问题,基于对代码编写确信没问题观点,我第二个猜测:会不会是我笔记本环境变量或是哪个配置出现问题而导致...(个人认为:出现这种情况概率十分之小)于是我将文件发送到我台式电脑,再次尝试编译,果不其然,依旧出现相同错误提示! 问题究竟出在哪?我想着问题范围应该就在于头文件了。...为了使编码时编译器不出现错误,我自然需要 * 将所使用到声明头文件包含在另一个头文件中!* 这个就是导致错误真正原因!...这个做法不可取),但是一旦头文件较多,复杂包含关系就会导致编译器没编译部分头文件或无法找到与头文件相关cpp文件(这一点我并非十分确定)。...在这样情况下,就会出现:无法解析外部符号 这样错误。 正确做法 为了避免这样错误,正确做法(我采取做法)是什么呢?

3.7K21

分享丨CC++内存管理详解--堆、栈

澳,错了,应该是delete []p,这是为了告诉编译器:我删除是一个数组,编译器就会根据相应Cookie信息去进行释放内存工作。 堆和栈究竟有什么区别 主要区别有以下几点:   (1)....你应该尽量避免分配对象数组,从而使你内存分配策略简单。 常见内存错误及其对策 发生内存错误是件非常麻烦事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。...犯这种错误主要有两个起因:一是没有初始化观念;二是误以为内存缺省初值全为零,导致引用初值错误(例如数组)。内存缺省初值究竟是什么并没有统一标准,尽管有些时候为零值,我们宁可信其无不可信其有。...从语法上看,编译器并不觉得语句p[0]= ‘X’有什么不妥,但是该语句企图修改常量字符串内容而导致运行错误。...编译器总是要为函数每个参数制作临时副本,指针参数p副本是 _p,编译器使_p=p。如果函数体内程序修改了_p内容,就导致参数p内容作相应修改。这就是指针可以用作输出参数原因。

97621

C++】内联函数、auto关键字、NULL与nullptr

+针对宏存在这些缺点,给出了以下应对方法: 用const enum来定义常量 用内联函数来替换短小宏函数定义 内联函数概念 函数前面用关键字inline来修饰函数,就叫内联函数,编译时C++编译器会在调用内联函数地方将指令展开...内联函数特性 空间换时间 内联函数 vs 函数 我们可以针对一段简单代码,来查看两者反汇编,测试一下内联函数究竟会不会提升效率,不过在此之前需要进行一些调整,在debug版本下,想要观察内联函数指令展开...不过有些编译器会忽略掉内联请求(有些内联函数编译器并不会进行展开),因此对于一些规模较小且频繁使用函数,我们才使用内联函数。 内联函数不建议声明和定义分离 分离会导致链接错误。...,调用频繁函数,另外内联函数声明与定义不可分离,会导致链接错误。...auto关键字 用法 就不多做一些背景介绍了,直接谈谈它用法,auto作用:用来进行自动推导变量类型并进行替换,具体是什么意思呢?

40760

C++inline函数简介

5.inline函数注意事项 了解了内联函数优缺点,在使用内联函数时,我们也要注意以下几个事项和建议。 (1)使用函数指针调用内联函数将会导致内联失败。...编译源文件为汇编代码或者反汇编查看有没有相关函数调用call,如果没有就是被inline了。具体可以参考here。 (7)C++类成员函数定义在类体内为什么不会报重定义错误?...如果编译器发现被定义在类体内成员函数无法被内联处理,也不会出现重定义错误,因为C++中存在5种作用域级别,分别是文件域(全局作用域)、命名空间域、类域、函数作用域和代码块作用域(局部域)。...当类成员函数被定义在类体内,那么其作用域也就被限制在类域,当然定义在类体外函数作用域也是属于类域。显然并不是因为作用域原因而不会产生重定义错误。 那么原因究竟是什么呢?...6.小结 可以将内联理解为C++中对于函数专有的宏,对于C函数宏一种改进。对于常量宏,C++提供const替代;而对于函数宏,C++提供方案则是inline。

1.9K20

C语言内存管理

据调查80%程序崩溃都是内存管理出现问题,有时候表面没有问题,运行一段时间后问题就爆发了,所以对内存管理非常重要,这里和大家一起总结讨论下C/C++中关于内存管理一些要点。...3 常见内存错误及其对策 发生内存错误是件非常麻烦事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显症状,时隐时现,增加了改错难度。...犯这种错误主要有两个起因:一是没有初始化观念;二是误以为内存缺省初值全为零,导致引用初值错误。....*/}/*初始化为0*/memset(p, 0, sizeof(int)); 内存缺省初值究竟是什么并没有统一标准,尽管有些时候为零值,我们宁可信其无不可信其有。...编译器总是要为函数每个参数制作临时副本,指针参数p副本是 _p,编译器使 _p = p。如果函数体内程序修改了_p内容,就导致参数p内容作相应修改。 这就是指针可以用作输出参数原因。

1.6K2319

C与C++内存管理避坑指南

,有时候表面没有问题,运行一段时间后问题就爆发了,所以对内存管理非常重要,这里和大家一起总结讨论下C/C++中关于内存管理一些要点。...3 常见内存错误及其对策 发生内存错误是件非常麻烦事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显症状,时隐时现,增加了改错难度。...犯这种错误主要有两个起因:一是没有初始化观念;二是误以为内存缺省初值全为零,导致引用初值错误。....*/ } /*初始化为0*/ memset(p, 0, sizeof(int)); 内存缺省初值究竟是什么并没有统一标准,尽管有些时候为零值,我们宁可信其无不可信其有。...编译器总是要为函数每个参数制作临时副本,指针参数p副本是 _p,编译器使 _p = p。如果函数体内程序修改了_p内容,就导致参数p内容作相应修改。这就是指针可以用作输出参数原因。

85220

深入理解 C++ 语法:从基础知识到高级应用

只需将其视为几乎总是出现在你程序中内容。 第 3 行:空白行。C++ 忽略空白字符。但我们使用它来使代码更易读。 第 4 行:C++ 程序中另一个几乎总是出现东西是 int main()。...注意:int main() 主体也可以写成:int main() { cout << "Hello World! "; return 0; }。记住:编译器会忽略空格。但是,多行使代码更易读。...<< endl; cout << "I am learning C++"; return 0; } \n 和 endl 都用于换行。然而,\n 最常用。 但是,\n 究竟是什么?...换行字符 (\n) 被称为转义序列,它强制光标将其位置更改为屏幕上下一行开头。这将导致换行。...// 和行末之间任何文本都将被编译器忽略(不会执行)。 此示例在代码行之前使用了单行注释: 示例 // This is a comment cout << "Hello World!"

8600

C语言C++基本语句编程风格

基本语句编程举例 if语句 if语句是C++/C语言中最简单、最常用语句,然而很多编程人员用隐含错误方式写if语句,本文以“与零值比较”为例,进行讨论。...根据布尔类型语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE究竟是什么并没有统一标准, 例如VC++将TRUE定义为1,而VB则将TRUE定义为-1。...编译器认为if(p = NULL)是合法,但会指出if(NULL = p)是错误,因为NULL不能被赋值。...state: 如果编译器不能发觉此类错误,每用一次 goto 语句都可能留下隐患。...很多人建议废除 C++/C goto 语句,以绝后患。 但实事求是地说,错误是程序员自己造成,不是 goto 过错。

2K10

面向对象之this指针与类中枚举类型

this指针与类中枚举类型 1.this指针 相信在坐很多人,都在学Python,对于Python来说有self,类比到C++中就是this指针,那么下面一起来深入分析this指针在类中使用!...另外,在网上大家会看到this会被编译器解析成A *const,A const *,究竟是哪一个呢?...在C++中类和结构是只有一个区别的:类成员默认是private,而结构是public。this是类指针,如果换成结构,那this就是结构指针了。...以下用法是错误,因为类对象未被创建时,编译器不知道 SIZE 是什么。...(c++11标准前) class A { const int SIZE = 100; // 错误,企图在类声明中初始化 const 数据成员 int array[SIZE]; // 错误

1.1K10

查看自动类型推导结果方法

,虽然确定类型事情交给编译器去做了,但是在有的时候我们可能还是想知道编译器推导出来类型具体是什么,下面就来介绍几种获取类型推导结果方法,根据开发不同阶段,你可以在不同阶段采用不同方法,比如在编写代码时...编译时打印编译器肯定是知道变量类型,但是它没法直接告诉你,有一个可以让编译器告诉你办法,就是编译发生错误编译器在报告错误信息中肯定会提到导致错误类型,因此我们可以声明一个如下模板:template...class dumpType;因为上面的模板只有声明,没有具体定义,因此如果要实例化这个模板就会导致一个编译错误。...所以我们想要查看哪个变量类型,只要将这个变量类型作为模板形参去实例化它,就会导致一个错误,在编译器给出错误信息里就会显示出这个变量具体类型,如下所示:const int x1 = 1;auto...C++标准中定义,是由各编译器扩展,因此名称不一样,在GCC/Clang中是__PRETTY_FUNCTION__,在微软MSVC中是__FUNCSIG__,如下代码:#include <iostream

7710

2019-10-14-C++CLI居然不能创建无参数list

作为一名.Net开发,如果有一天编译器突然告诉你,你必须要为每一个list构造函数传入参数,不能使用foreach处理数列。你会不会抓狂? ---- 来分享下我踩到坑 ? ?...然而c++/cli是.NET兼容语言,语法自然是支持list或者foreach使用。所以事实上这里语法完全没有任何问题,而且是可以通过编译,就如同下图。 ? 那么是什么造成这些错误提示了呢?...既然语法没有问题,那么原因就可能集中在编译器上了。 那会不会是IDE设置问题呢? 尝试了多个vs版本以及c++编译器版本,这个错误提示都会出现。...这个选项就是告诉编译器,只能按照标准c++语法进行编译,任何vc++特有的c++语法都不能通过。 那么,对于c++/cli来说,是.NET兼容语言,自然和标准c++语法差异更大了。...因此,出现这个情况很可能是该项目从vc++项目改动过来导致 参考链接: Give Visual C++ a Switch to Standard Conformance - C++ Team Blog

36710

泛型篇

1、Java中泛型是什么 ? 使用泛型好处是什么?   泛型是Java SE 1.5新特性,泛型本质是参数化类型,也就是说所操作数据类型被指定为一个参数。...根据你对这个泛型问题回答情况,你会得到一些后续提问,比如为什么泛型是由类型擦除来实现或者给你展示一些会导致编译器出错错误泛型代码。...真这样做的话会导致编译错误。...在 C++中,模板本质上就是一套宏指令集,只是换了个名头,编译器会针对每种类型创建一份模板代码副本。...和变量,因为它们会被不同类型参数指定实例共享。在C++,这些类时不同,因此类型参数可以用于静态方法和静态变量。   在Java中,不管类型参数是什么,所有的实例变量都是同一类型。

1.1K50

不要被C++“自动生成”所蒙骗

这些基础语法对学习过C++的人或许并不陌生,我们自从学习了面向对象C++后,一直都知道编译器为我们提供了这样便利条件。...如果你真的形成了这种观念的话,那么恭喜你,因为你已经将C++基本规则运用十分熟练了。同时遗憾是你我都看到了冰山一角,编译器工作方式远不像我们使用它那样。...和我一样又好奇心的人都想一探究竟,而这些内容在《Inside The C++ Object Model》被诠释比较彻底。...这次编译器“毫不客气”为A生成了默认构造函数,虽然它没有调用任何其他构造函数!这是什么原因呢?...的确,相信这些生成规则不会对我们编程带来多大影响(不会产生错误),但是只有了解它们背后操作,我们才知道编译器究竟为我们做了什么,我们才知道如何使用C++才能让它变得更有效率——比如消除不必要构造和虚拟机制等

68890

C++之内联函数

那么,接下来我们就来了解一下内联函数是什么,以及它为什么可以替换宏。...二、内联函数 使用inline关键字修饰函数叫做内联函数,编译时C++编译器会在调用内联函数地方展开,因此没有函数调用建立栈帧开销,进而提升程序运行效率。...(3)内联函数不建议声明和定义分离 内联函数声明和定义分离会导致链接错误,所以使用内联函数就直接在该源文件中定义即可。 为什么内联函数不能声明和定义分离?...,因此,在编译期间源文件所生成符号表中找不到内联函数,链接时就无法在符号表中找到对应函数,就会导致链接错误。...本文作者目前也是正在学习C++相关知识,如果文章中内容有错误或者不严谨部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

56420
领券