C:当我将值放在括号中时,打印%c不起作用

Mac*_*j B 2 c string printf

这是我在这里发表的第一篇文章,我试图尽可能地与标题一致.对不起任何错误:)

我正在为CS课程做我的pset而且我有打印我的价值的问题.当我把这个值放在这个:(%c, p[j] + k%26)程序打印它.当我把它放在括号中时,它没有.在这种情况下,这是一个重要的区别.

你对我有什么建议吗?如果是这样,请不要编写任何代码,因为我们不允许从外部接收任何代码.请告诉我,如果在C中我正在做的事情是非法的,或者可能会问一些可能有帮助的开放式问题!

守则的相关部分

for (int j = 0, m = strlen(p); j < m; j++)
{
    if (isalpha(p[j]))
    {
        printf("%c", (p[j] + k)%26);
    }
    else
    {
        printf("%c", p[j]);
    }
}
Run Code Online (Sandbox Code Playgroud)

gsa*_*ras 5

你的意思是在括号中.

这个:

p[j] + k % 26
Run Code Online (Sandbox Code Playgroud)

不同于:

(p[j] + k) % 26
Run Code Online (Sandbox Code Playgroud)

因为运算符在前面,其中模数将在加法之前执行.但是,括在括号中的公式将具有最高的前缀,因此将首先执行.


因此,第一种情况k % 26将首先执行,并将其结果添加到p[j].

在第二种情况下,p[j]将被添加到k,并且该总和将受到影响% 26.

正如您所看到的,这两件事情是不同的,从而解释了您所经历的不同行为.


正如Eugene所提到的,ascii值从0到25的字符并不总是可打印的.