C不会隐式地将int转换为char

时间:2017-09-06 17:25:21

标签: c ascii implicit-conversion

printf("%c", (plaintext[i] + keyword[(count % keywordLength)]) % 26;);

plaintextkeyword属于string数据类型(char *),count是一个int,keywordLength是返回的值strlen(keyword)。当我使用整数格式说明符时,整数打印。但是,我希望它以字母形式打印,但是当我使用字符格式说明符时它什么都不打印。我不知道为什么。

对于我的例子,以下是真实的:

char * plaintext = "hello";
char * keyword = "abc";

1 个答案:

答案 0 :(得分:2)

代码正在打印控制字符:

printf("%c", (plaintext[i] + keyword[(count % keywordLength)]) % 26);

代码依赖于printf("%c", 0);打印一个字母,当它确实打印出一个控制字符时 - 可能看不到。

微妙的说明:代码依赖plaintext[i], keyword[]仅包含非负值。如果plaintext[i] + keyword[(count % keywordLength)]的总和小于0,则sum % 26也将为负数。

要在[A-Z]中打印ASCII值,请添加'A''a' @lurker

int sum = plaintext[i] + keyword[(count % keywordLength)];
printf("%c", (sum % 26) + 'A');

迂腐地处理否定sum并且具有高度便携性:

int sum = plaintext[i] + keyword[(count % keywordLength)];
// mod math, even for negative values
sum = ((sum % 26) + 26) % 26;
// Print letter, even when encoding is not ASCII
printf("%c", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[sum]);