我的代码有麻烦。这是我到目前为止的内容:
#include <iostream>
using namespace std;
int main()
{
char word[128];
int x = 0;
int v;
int shift;
int sv;
cin >> shift;
cin >> word;
while (word[x] != '\0') // While the string isn't at the end...
{
cout << int(word[x]) << " "; // Transform the char to int
x++;
v = int(word[x]);
sv = v + shift;
cout << sv;
}
return 0;
}
这是一个凯撒密码,至少是其中的一部分。
当我输入时:
shift=1
word=f
我希望结果是:
102 103
相反,我最终得到了这个:
102 1
我在做什么错?有更好的方法吗?
答案 0 :(得分:0)
在完成所有处理后,循环计数器通常在循环结束时增加。在您的情况下,x
在确定while
循环的条件时充当循环计数器。
因此语句x++
应该在所有处理之后,即在最后一个cout
之后。
对于for loop,
iteration_expression
在循环的每次迭代后之后和之前重新执行条件时执行。通常,这是使循环计数器递增的表达式。
因此您可以将上述while
更改为for
,如下所示:
for(x = 0; word[x] != '\0'; x++)
然后,您不必必须在循环内递增x
。
答案 1 :(得分:0)
在循环结束时移动递增x
的行。您要先显示x
,然后才能显示移位的值。
while (word[x] != '\0') // While the string isn't at the end...
{
cout << int(word[x]) << " "; // Transform the char to int
v = int(word[x]);
sv = v + shift;
cout << sv;
x++;
}