这是我在这里发表的第一篇文章,我试图尽可能地与标题一致.对不起任何错误:)
我正在为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)
你的意思是在括号中.
这个:
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的字符并不总是可打印的.