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

时间:2017-05-09 17:38:11

标签: 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]);
    }
}

5 个答案:

答案 0 :(得分:5)

您的意思是括号

此:

p[j] + k % 26

不同于:

(p[j] + k) % 26

因为operator preceding,模数将在加法之前执行。但是,括在括号中的公式将具有最高的前缀,因此将首先执行。

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

在第二种情况下,p[j]将添加到k,该金额将受% 26影响。

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

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

答案 1 :(得分:2)

执行(p[j]+k)%26时,您获得0-25之间的值。参考ASCII表,这些值代表控制字符。

我假设您正在为某些密码编码。在这种情况下,您只需要从p[i]+j中减去26。请记住,字母的ASCII值不是0-25

答案 2 :(得分:0)

预计在角色中添加一个偏移是某个角色,在第一种情况下可能在p[j]p[j]+25的范围内,在第二种情况下也可以

你只是尝试打印ascii值为0到25的东西,这可能是不可打印的东西。

但在这两种情况下,您可能会遇到不可打印的问题。

%的优先级高于+,因此在第一种情况下 p[j] + (k%26)

在第二种情况下 (p[j] + k)%26

答案 3 :(得分:0)

这是两个不同的事情,因为%运算符优先于总和,所以这是数学的问题。代码

printf("%c", (p[j] + k)%26);

始终打印一个字符,但在这种情况下,您将模数操作(%)应用于最终值,从而产生0到25之间的数字。请注意,此字符都不可打印(即它们是空格或其他---请参阅ASCII表格。

答案 4 :(得分:0)

好吧,因为结果将是一些从 0 到 25 的数字,顺便说一句,在 ascii 代码中是不可打印的,所以如果数字是大写,则必须添加 65,如果数字是小写,则必须添加 97 此处是 the ascii code table 以了解更多

<EmbeddedResource Update="Migrations\202107071914322_WhateverMigration.resx">
    <Generator></Generator>
    <DependentUpon>202107071914322_WhateverMigration.cs</DependentUpon>
</EmbeddedResource>