printf("%c", (plaintext[i] + keyword[(count % keywordLength)]) % 26;);
plaintext
和keyword
属于string
数据类型(char *
),count
是一个int,keywordLength
是返回的值strlen(keyword)
。当我使用整数格式说明符时,整数打印。但是,我希望它以字母形式打印,但是当我使用字符格式说明符时它什么都不打印。我不知道为什么。
对于我的例子,以下是真实的:
char * plaintext = "hello";
char * keyword = "abc";
答案 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]);