热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C整数关闭,可能溢出

如何解决《C整数关闭,可能溢出》经验,为你挑选了1个好方法。

我正在尝试制作一个C程序,用于计算和打印用户输入的制表符,空格和行数.问题在于,当它打印出这些数字时,它们就会大放异彩.这是我的程序代码:

int c, b, t, nl;
b, t, nl = 0, 0, 0;
while ((c = getchar()) != EOF) 
{
    if (c == '\b') 
        b++;
    if (c == '\t') 
        t++;
    if (c == '\n') 
        nl++;
}
printf("b=%d t=%d nl=%d\n", b, t, nl);

当我从终端输入一些数据时(3行,一个空格,一个标签),结果是b = 1899313536,t = 32768,并且nl = 3.



1> Grzegorz Szp..:

问题出在这一行:

b, t, nl = 0, 0, 0;

它在赋值的两侧使用逗号运算符,因此只用nl初始化为零.有没有副作用的评价b,t在左侧*和的右侧有两个尾随零=操作(注意分配具有更高的优先级,比逗号操作).

将其更改为:

b = t = nl = 0;

这实际上意味着(因为=运营商具有正确的相关性):

b = (t = (nl = 0));

*除非b或被t宣布为volatile(由于C标准将此类对象的读数计为副作用)


推荐阅读
author-avatar
gete
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有