打印字符数组时接收垃圾值

时间:2014-11-02 07:46:28

标签: c++

我正在编写一个代码来加密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;
}

2 个答案:

答案 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};