以下代码应该使用停止密码加密一个句子,它仍然是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);
}
}
Run Code Online (Sandbox Code Playgroud)
我明白了
caeser.c:15:23 use of undeclared identifier i.
Run Code Online (Sandbox Code Playgroud)
哪个就行了 char temp = value[i];
删除for行尾的分号:
for(int i = 0;i<n; i++);
Run Code Online (Sandbox Code Playgroud)
声明int i在那里使它成为for块的本地,但由于分号是一个空块.
所以在下面的代码块(之间{ })i没有声明,因为它不属于for.
这也将修复程序不执行for多次的主体(如果编译它将会执行).如果这已编译,for循环将循环直到n但不执行任何操作.然后,花括号之间的代码将被执行i == n(假设i然后该代码块可见).因此,您的代码将始终执行temp == '\0'(终止null value)并始终打印相同的密码值.
ENCORE :(正如评论中所解释的那样,但这里是为了完整性)
由于两个原因,将字符文字转换为ints(int conv = temp - (int)'A';)是不必要的:
int,不是chars(我认为这在C++中是不同的)char总是小于a int,因此总是适合内部,int因此可以安全地进行推广.