为什么模运算符不在C中的printf函数内工作?

时间:2017-05-23 12:06:27

标签: c function cs50

当我删除“%97”时,代码会工作并打印出预期的内容。就像输入是“a”一样,它打印“f”,而当模数97存在并打印空格时,它不起作用。

这个问题背后的原因是什么?怎么解决?

    int main(void)
    {
        char *s = get_string();
        for(int i = 0; i<strlen(s); i++)
        printf("this is %c", (s[i]+5%97));
    }

编辑:添加括号后的人,即将我的最后一行更改为“(s [i] +5)%97”程序无法按预期工作。输入“a”后,输出应为“f”,但它是空格。

进入“A”后,我得到“F”!!发生了什么?该程序旨在将“a”转换为“a + 5”,但它将“A”转换为“A + 5”。请解释一下。

1 个答案:

答案 0 :(得分:7)

我想你想写:

(s[i] + 5) % 97

你写的表达式:

s[i] + 5 % 97

与:

相同
s[i] + (5 % 97)

即,运算符%的优先级高于+

您正在代码中将5 % 97 5 添加到s[i]