printf("%c", (plaintext[i] + keyword[(count % keywordLength)]) % 26;);
其中 plaintext
和 keyword
属于 string
数据类型 (char *
),count
是一个 int,keywordLength
是 strlen(keyword)
的返回值。当我使用整数格式说明符时,会打印整数。但是,我希望它作为字母打印,但当我使用字符格式说明符时它什么也不打印。我不知道为什么。
对于我的示例,以下情况正确:
char * plaintext = "hello";
char * keyword = "abc";
最佳答案
代码正在打印控制字符:
printf("%c", (plaintext[i] + keyword[(count % keywordLength)]) % 26);
代码依赖于 printf("%c", 0);
打印字母,当它确实打印控制字符时 - 这可能不可见。
微妙的注意:代码依赖于 plaintext[i], keywords[]
仅包含非负值。如果 plaintext[i] + keywords[(count % keywordsLength)]
的总和小于 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]);
关于C 没有隐式将 int 转换为 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46081097/