加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C整数关闭,可能溢出

发布时间:2020-12-16 10:44:20 所属栏目:百科 来源:网络整理
导读:我正在尝试制作一个C程序,用于计算和打印用户输入的制表符,空格和行数.问题在于,当它打印出这些数字时,它们就会大放异彩.这是我的程序代码: int c,b,t,nl;b,nl = 0,0;while ((c = getchar()) != EOF) { if (c == 'b') b++; if (c == 't') t++; if (c == '
我正在尝试制作一个C程序,用于计算和打印用户输入的制表符,空格和行数.问题在于,当它打印出这些数字时,它们就会大放异彩.这是我的程序代码:

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

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

解决方法

问题出在这一行:

b,0;

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

将其更改为:

b = t = nl = 0;

这实际上意味着(as =运算符具有正确的关联性):

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

*除非b或t被声明为挥发性(因为C标准将此类对象的读数计为副作用)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读