我正在編寫一個代碼來加密凱撒密碼中輸入的文本,但我遇到了問題。在運行我的代碼時,我的循環沒有在空字符處終止。代碼如下:打印字符數組時接收垃圾值
#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;
}
我曾嘗試: 「!en_message [索引] = '\ 0'」
1)使用一個循環輸出數組 「en_message」 與 使用和「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;
}
看看,http://stackoverflow.com/questions/2037209/what-is-a-null-terminated-string。您在加密字符串的末尾忘記'\ 0'。 – 2014-11-02 07:50:02
您如何期待輸出程序知道何時停止? – 2014-11-02 08:26:22
而不是創建任意大小的數組,爲什麼不使用向量或只有正確大小所需的字符串? – 2014-11-05 14:55:33