由一道题引起的“感叹号=“与=优先级比较思考

简介: 由一道题引起的“感叹号=“与=优先级比较思考

前几日做题

写到了如下一道题,统计各个字符的个数

#include <stdio.h>
int main()
{int digit,i,letter,other;
    char ch;
    digit=letter=other=0;
    printf("Enter characters:");
    while(ch=getchar()!='\n')
    if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
    letter++;
    else if(ch>='0'&&ch<='9')
    digit++;
    else
    other++;
    printf("letter=%d,digit=%d,other=%d\n",letter,digit,other);
    return 0;
        
    
}

你是否发现这个代码存在一些问题?正是运算符优先级带来的结果错误

若输入f(x,y)=3x+5y-10,结果为14 0 0,显然,这不是我们想要的结果。

问题出在while(ch=getchar()!='\n'),若改为while((ch=getchar()!)='\n'),结果正确。

如果将 while 循环的条件改为 while (ch = getchar() != '\n'),会导致程序出现逻辑错误。这是因为赋值运算符 = 的优先级低于比较运算符 !=,所以这个条件实际上等同于 while (ch = (getchar() != '\n'))。

在这种情况下,getchar() 返回的是输入的字符的 ASCII 值,然后与 '\n' 比较。这样的比较会产生一个布尔值(true 或 false),然后将该布尔值赋给 ch。因此,ch 将被赋值为 1 或 0,而不是用户输入的字符。

这会导致程序不再按照预期工作,因为 ch 的值将始终是 1 或 0,而不是用户输入的实际字符。这将导致字符分类的逻辑失效,程序将不再正确统计字母、数字和其他字符的数量。

正确的写法是将赋值语句用括号括起来,以确保赋值操作在比较之前完成,即 while ((ch = getchar()) != '\n')。这样可以保证 getchar() 的返回值被赋给 ch,然后再与 '\n' 比较。

如果有收获或其他想法,欢迎评论区交流!

相关文章
|
存储 资源调度 分布式计算
CDP中配置Apache Hadoop Yarn的安全性
CDP中配置Hadoop Yarn的安全性。
844 0
CDP中配置Apache Hadoop Yarn的安全性
|
5月前
|
监控 自动驾驶 算法
《目标检测双雄:YOLO与Faster R-CNN,谁主沉浮?》
目标检测是计算机视觉的重要技术,广泛应用于安防、自动驾驶和工业生产等领域。YOLO与Faster R-CNN是其中的两大代表算法。YOLO以速度见长,将目标检测转化为回归问题,通过一次前向传播实现快速检测,适合实时性要求高的场景,如自动驾驶和视频监控。Faster R-CNN则采用两阶段策略,先生成候选区域再精确定位,检测精度更高,适用于医学影像分析、工业缺陷检测等对准确性要求极高的领域。两者各具优势,在不同场景中发挥独特作用,共同推动计算机视觉技术的发展。
187 4
|
并行计算 算法 编译器
什么是SSA模式,它的工作原理是什么
【9月更文挑战第1天】什么是SSA模式,它的工作原理是什么
859 0
|
网络协议 Linux KVM
在Linux中,如何配置网络桥接?
在Linux中,如何配置网络桥接?
|
机器学习/深度学习 边缘计算 PyTorch
PyTorch 与 ONNX:模型的跨平台部署策略
【8月更文第27天】深度学习模型的训练通常是在具有强大计算能力的平台上完成的,比如配备有高性能 GPU 的服务器。然而,为了将这些模型应用到实际产品中,往往需要将其部署到各种不同的设备上,包括移动设备、边缘计算设备甚至是嵌入式系统。这就需要一种能够在多种平台上运行的模型格式。ONNX(Open Neural Network Exchange)作为一种开放的标准,旨在解决模型的可移植性问题,使得开发者可以在不同的框架之间无缝迁移模型。本文将介绍如何使用 PyTorch 将训练好的模型导出为 ONNX 格式,并进一步探讨如何在不同平台上部署这些模型。
1197 2
技术笔记:Netd学习笔记
技术笔记:Netd学习笔记
89 0
|
SQL 分布式计算 关系型数据库
HBase ImportTSV工具使用
HBase ImportTSV工具使用
328 0
|
Unix Linux
R语言-文件归档压缩方法
本文简单分享了一种在 R语言 中压缩文件的实现方法,以供参考学习
783 0
R语言-文件归档压缩方法
|
自然语言处理 编译器 C语言
C语言程序编译和链接
在ANSI C的任何⼀种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。 第2种是执⾏环境,它⽤于实际执⾏代码。
80 0
|
传感器 人工智能
西门子S7-300模拟量模块如何接线?
模拟量输入简称模入或AI,模拟量输入模块SM331目前有三种规格型号,即8AI*12位模块、2AI*12位模块和8AI*16位模块。
西门子S7-300模拟量模块如何接线?