以下代码应该使用终止密码对句子进行加密,但仍然是WIP,我还没有考虑空格,小写字母等。
int main(int argc,string argv[])
{
int k = atoi(argv[1]);
string value = GetString();
int n = strlen(value);
for(int i = 0;i<n; i++);
{
char temp = value[i];
int conv = temp - (int)'A';
int cipher = (conv + k)%26;
char final = cipher + (int)'A';
printf("%c\n",final);
}
}
我懂了
caeser.c:15:23 use of undeclared identifier i.
在线上 char temp = value[i];
删除for
行末的分号:
for(int i = 0;i<n; i++);
声明int i
在那里使它在for
块的局部,但是由于分号是一个空块。
因此,在下面的代码块中(之间{ }
)i
没有声明,因为它不属于for
。
这还将修复程序不执行for
一次以上的主体(如果编译的话)。如果已编译,则该for
循环将一直循环直到n
但不执行任何操作。然后,花括号之间的代码将被执行i == n
(假定i
对该代码块可见)。因此,您的代码将始终以temp == '\0'
(在中终止为null value
)执行,并始终输出相同的密码值。
ENCORE:(如评论中所述,但出于完整性考虑)
不需要将字符文字强制转换为int
s(int conv = temp - (int)'A';
),这有两个原因:
int
s而不是char
s(我相信这在C ++中是不同的)char
总是小于an int
,因此总是适合a内,int
因此可以安全地进行推广。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句