如果语句和大括号..有/没有不同的结果

2023-12-21

好吧,我正在学习 C++,在使用其中一个教程时遇到了一种奇怪的效果,但我不太明白它发生的情况。

对于本教程(从提供的示例中复制),我在类模板专业化中编写了一个函数,用于检查 char 是否为小写,然后将其变为大写:

char uppercase ()
{
    //checks to see if "element"(char) is a lower-case letter between 'a' and 'z'
    if ((element >= 'a') && (element <= 'z'))
    {
        //changes value of "element" to be element + (value of A - Value of a)[-32]
        element += 'A' - 'a'; //element = element + -32
        return element;
    };
};

现在,奇怪的是..即使字符已经是大写,这段代码仍然会被触发。因此,如果我调用值为“j”的函数,我显然会按照预期得到“J”。但是,如果我使用值“J”进行调用,该函数仍然会执行......因此该函数不是不更改任何内容,而是返回“*”。

现在,有趣的是..如果我从 if 语句中删除括号,它就会按预期工作。所以,与

char uppercase ()
{
    //checks to see if "element"(char) is a lower-case letter between 'a' and 'z'
    if ((element >= 'a') && (element <= 'z'))
        //changes value of "element" to be element + (value of A - Value of a)[-32]
        element += 'A' - 'a'; //element = element + -32
        return element;
};

它完全按照预期工作。使用值“J”调用函数只会返回“J”,因为条件不满足,因此没有执行任何代码。现在,我知道 if 语句中大括号是可选的,但教程说多个语句需要大括号。

还值得注意的是,使用大括号和简单的 return 在语句中添加 else 可以达到预期的效果,但这应该是不必要的,对吗?

所以,基本上..我是否遗漏了有关大括号的内容,或者这只是编译器的问题(Visual Studio 2012)?


这是根据设计,if只接受一个语句,大括号构成一个块一个语句。

如果你想通过缩进来确定范围,请使用Python。

您的代码的问题是,当if语句不匹配,这会导致未定义的行为。您的编译器可能会就此发出警告。不要忽略编译器警告。

第二块代码其实就是你想要的,只改变变量element当你的if匹配,但始终返回变量element.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果语句和大括号..有/没有不同的结果 的相关文章

  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • JDK8 中使用的 Rhino javascript JSR-223-wrapper 在哪里?

    我的目的是在 AdaptOpenJDK 8 VM 中提供 JSR 223 javascript 引擎 所以我想到使用已经熟悉的Rhino OpenJDK wiki 文档在这里 https wiki openjdk java net disp
  • 查找目录和子目录中的所有零字节文件

    如何查找目录及其子目录中的所有零字节文件 我已经这样做了 bin bash lns vdir R dir awk print 8 t 5 temp for file in lns do if test file 0 then printf
  • 显示详细信息转场时未调用 Deinit

    我在一个较大的 Swift 项目中遇到了这个问题 但能够在一个非常基本的项目中复制它 我有以下视图控制器类 class ViewController UIViewController deinit println Deinitializin
  • 双重比较零特殊情况?

    我正在初始化一个双数组 double foo new double n 我的理解是java语言规范导致数组中的所有值都初始化为零 当我执行算法时 数组中的一些条目被设置为正值 因此 要检查特定元素是否设置了非零值 仅使用是否安全 if fo
  • 理解Linux目录权限推理

    您好 我有两个关于 linux 目录权限的问题 我不明白 我从名为 Documents 的文件夹中删除了执行标志 之后我无法在其上使用 cd 但我仍然可以从父目录执行 ls Documents 它仍然列出 Documents 目录中的文件
  • 由于 float 和 double 的精度有限而导致的错误

    在C 中 我使用以下代码来计算由于float和double的精度有限而导致的误差的数量级 float n 1 float dec 1 while n n dec dec dec 10 cout lt lt dec lt lt endl 在
  • 使用 pelican-quickstart 时出错“没有名为 html_parser 的模块”

    我决定给予pelican尝试一下 但是当我跑步时pelican quickstart 我收到以下对话框 pelican quickstart Traceback most recent call last File usr local bi
  • 仅针对具有枚举非类型模板参数的 C++ 模板函数的特化

    这个问题与this one https stackoverflow com questions 2155491 hide function template declare specializations除了处理类型名模板参数之外 我尝试使
  • jquery ui datepicker后退按钮跳转到1899

    我一定是缺少某些设置或其他内容 但是当我使用后退按钮时 日期选择器会从当前年份跳转到 1899 年 有其他人看到这个并修复它吗 你可以看到我注释掉的不同组合 dialog search from datepicker defaultDate
  • 如何获得“nls”对象的漂亮乳胶输出

    我需要 nls 对象的 LaTex 表示 不幸的是 stargazer 不支持这种对象类型 网上的一些研究使我从 nls2 库中找到了 as lm nls 函数 它声称将 nls 对象转换为相应的 lm 对象 就我而言 它惨遭失败 以下是示
  • 对组中的浮点数列表进行排序

    我有一个浮点数数组 它是无序的 我知道这些值总是落在几个未知的点附近 为了便于说明 此列表 10 01 5 001 4 89 5 1 9 9 10 1 5 05 4 99 值集中在 5 和 10 附近 所以我想要 5 10 作为答案 我想找
  • 修改 htmlpurifier 允许的标记

    我的 html 净化器设置现在只允许这些标签 configuration gt set HTML Allowed p ul ol li 我想允许列表缩进 我的编辑器使用这个 html ul style margin left 40px 我应
  • android studio新建项目看不到src文件夹

    重新安装 android studio 后 我创建了一个新项目 MyapplicationProject 在 Windows 资源管理器中我看到所有文件夹 MyapplicationProject Myapplication libs sr
  • 在XSLT中声明全局变量,在本地重新赋值

    我可以在全局范围内声明一个值为 111 的变量 myVariable 但如何在本地重新赋值呢 或者有其他方法可以实现这一目标 请帮忙 谢谢 拉维 您可以在模板内重新定义相同的变量
  • “QwtLog10ScaleEngine”之前需要类型说明符吗?

    版本 qwt 6 0 1 我尝试开发频谱的对数缩放 我使用简单的线条来启用缩放plotspectrum gt setAxisScaleEngine QwtPlot yLeft new QwtLog10ScaleEngine 问题 数据未绘制
  • 如何在 Mac OS X 中生成核心转储?

    我似乎无法在 Mac OS X 10 6 8 中生成核心转储 ulimit c unlimited a out Hello world Segmentation fault find type f name core ls la cores
  • 如何在 java 中使用 Apache POI XWPF 将图片添加到 .docx 文档

    我使用 Java POI 3 7 创建了一个简单的 docx 文档 XWPF 然后 我添加了一张图片 使用该方法XWPFDocument addpicture byte arg0 int arg1 XWPFDocument docx new
  • 使用 NodeJS 和 node-formidable 上传文件

    我使用node js和强大的模块成功上传文件 保存在磁盘上的文件格式错误 编码错误 例如如果我上传图像我无法查看它 如果我上传 txt 文件 gedit 提供以下消息 gedit 无法检测到字符编码 请检查您是否没有尝试打开二进制文件 从菜
  • HSQLDB 语句和 Java NaN 双精度

    我目前正在使用 HSQLDB 来保存 java 数据 在这些数据中 有一些 Double 其中一些可以是以下值 NaN 被形容为0 0 0 0在 javadoc 中 HSQLDB 知道如何处理这些值setDouble and setFloa
  • 如果语句和大括号..有/没有不同的结果

    好吧 我正在学习 C 在使用其中一个教程时遇到了一种奇怪的效果 但我不太明白它发生的情况 对于本教程 从提供的示例中复制 我在类模板专业化中编写了一个函数 用于检查 char 是否为小写 然后将其变为大写 char uppercase ch