【发布时间】:2024-01-18 04:21:01
【问题描述】:
所以我正在尝试编写一个可以用作密码的代码。它将输入要加密的单词作为输入并输出(打印)编码的单词。我的代码有问题的 sn-p 是 for 循环。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
char input[] = "hello";
printf("hello\n");
printf("ciphertext: ");
for (int i = 0; i < 5; i++)
{
if(isalpha(input[i]))
{
int current = input[i];
int cypher = ((current + 1) % 26 )+current;
char out = (char)cypher;
printf("%c", out);
}
else
{
printf("%c", input[i]);
}
}
printf("\n");
}
我在调试时遇到的问题是最终存储在“out”中的值似乎是正确的,但是在打印它时,它完全显示了其他东西。我确实查找了很多我在这里找到的东西,例如这样编写代码:
char out = (char)cypher;
char out= cypher + '0';
等等,但无济于事。输出应该是 ifmmp 而是我得到 j~rrx
任何事情都会有帮助!谢谢:)
【问题讨论】:
-
105 'i'这正是调试器显示存储在out中的值的方式,即105。因为它是一个char变量,所以它添加了 ASCII representationi但这只是信息。 -
听起来你对调试器的输出感到困惑。向您展示 out 包含十进制 108、十六进制 0x6c 或 ascii 'l',这些都是对同一个字节的不同解释。见asciitable.com
-
在您的示例中,知道
int current = input[i];中的i是什么会很有帮助... MCVE 需要。 -
@DavidC.Rankin 在for循环里面,我已经更新了
-
执行相对于
'a'的mod:char out = (input[i] - 'a' + 1)%26 + 'a';小写input[i]。
标签: c++ c debugging casting c++17