2014-11-02 77 views
0

我正在編寫一個代碼來加密凱撒密碼中輸入的文本,但我遇到了問題。在運行我的代碼時,我的循環沒有在空字符處終止。代碼如下:打印字符數組時接收垃圾值

#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; 
} 
+3

看看,http://stackoverflow.com/questions/2037209/what-is-a-null-terminated-string。您在加密字符串的末尾忘記'\ 0'。 – 2014-11-02 07:50:02

+0

您如何期待輸出程序知道何時停止? – 2014-11-02 08:26:22

+0

而不是創建任意大小的數組,爲什麼不使用向量或只有正確大小所需的字符串? – 2014-11-05 14:55:33

回答

1

你的代碼是做正確的你正在縮進要做什麼,但是你沒有得到正確的輸出,因爲你沒有終止你的字符串。 210試試這個: -

int index; 
for (index = 0 ; message[index] != '\0' ; index++) 

和這個循環之後,你需要確保

en_message[index] = '\0'; 

一件事是,你必須考慮到只有大寫字母。所以如果輸入的是小寫字母,程序會發出垃圾值。

+0

感謝您的幫助。我工作了! – 2014-11-03 10:59:13

+0

是的,我正在爲大寫字母編寫此代碼。 – 2014-11-03 11:05:19

0

只是零初始化輸出緩衝器,它會工作(;替換此:

char message[200], en_message[200]; 

與此:

char message[200] = {0}, en_message[200] = {0}; 
+0

非常感謝您的幫助 – 2014-11-03 11:00:08

+0

或'= {};'就夠了。 – 2014-11-05 14:55:49