我正在编写一个代码来加密Caesar Cipher中输入的文本,但是我遇到了问题。在运行我的代码时,我的循环不会以null字符终止。代码如下:
#include <iostream>
using namespace std;
void main()
{
char message[200], en_message[200];
cout << "Enter your message to encrypt: ";
std::cin.getline(message,200);
for ( int index = 0 ; message[index] != '\0' ; index++ )
{
if ( message[index] == 'A' )
en_message[index] = 'X';
else if ( message[index] == 'B' )
en_message[index] = 'Y';
else if ( message[index] == 'C' )
en_message[index] = 'Z';
else
en_message[index] = message[index] - 3;
}
cout << en_message;
}
我尝试过:
1)使用循环输出数组“en_message” 使用“en_message [index]!='\ 0'”和“en_message [index]!=''”作为for循环的条件
2)使用if条件来打破循环。
无论我尝试什么,我都会得到这个输出! 1
任何帮助将不胜感激。提前全部谢谢。
编辑: 好的,现在我又遇到了另一个问题。我在我大学的实验室计算机上尝试了G ++编译器中的代码并且它有效但在家里我收到了这个错误“运行时检查失败#2。堆栈变量'en_message'已损坏。”我正在使用Visual Studio 2010。那可能是什么?修改后的代码是:
#include<iostream>
using namespace std;
void main()
{
char message[200], en_message[200];
int index;
cout << "Enter your message to encrypt: ";
cin >> index;
for ( index = 0 ; index < 200 ; index++ )
{
if ( message[index] == '\0' )
break;
if ( message[index] == 'A' )
en_message[index] = 'X';
else if ( message[index] == 'B' )
en_message[index] = 'Y';
else if ( message[index] == 'C' )
en_message[index] = 'Z';
else
en_message[index] = message[index] - 3;
}
en_message[index] = '\0';
cout << en_message;
}
答案 0 :(得分:1)
您的代码正在执行您要缩进的内容。但是,由于您没有终止字符串,因此无法获得正确的输出。
试试这个: -
int index;
for ( index = 0 ; message[index] != '\0' ; index++ )
在此循环之后
en_message[index] = '\0';
您需要确保的另一件事是您只考虑了大写字母。因此,如果输入是小写字母,程序将发出垃圾值。
答案 1 :(得分:0)
只需对输出缓冲区进行零初始化,它就能正常工作(;替换它:
char message[200], en_message[200];
用这个:
char message[200] = {0}, en_message[200] = {0};