2017-10-09 79 views
2

道歉,如果我錯過了另一個線程,我通過推薦,並沒有很像我所經歷的。我試圖在大寫和小寫字母中顯示字母表。在我提交到全面的事情,我想只有幾個測試:Char陣列輸出 - C++

int main() 
{ 
    char *letters[79] = { "Aa ","Bb ","Cc ", "/0"} ; 
    int pause; 
    cout << "Letters are: " << letters << endl ; 
    cout << "Continue (Y or N)" << endl ; 
    cin >> pause; 
    cout << endl; 

    return 0; 
} 

當我嘗試編譯這一直是結果:

console output of above code

我不能理解的是,爲什麼我我得到了這些字母上顯示的十六進制輸出,而不是字母本身。

+0

爲什麼你使用數組?你爲什麼用'char *'而不是'std :: string'?學習,還是因爲你認爲這是最好的方法?瞭解這有助於他人幫助你。 :) – druckermanly

+0

學習,我仍然在大學裏,這是我的第三週,這是使用數組和指針的任務的最邊緣。 – DeSa

+0

字母表示數組第一個元素的內存地址。如果要打印元素,則使用索引,如第一個元素的字母[0],第二個元素的字母[1]等。 –

回答

1

你錯過了提數組索引letters[0]

試試這個:

char *letters[79] = { "Aa ","Bb ","Cc ", "/0"}; 
cout << "Letters are: " << letters[0] << endl; 

輸出:

Letters are: Aa 

或環流這樣的:

char *letters[79] = { "Aa ","Bb ","Cc ", "/0"}; 
for(int i=0; i<sizeof(*letters); i++) 
    cout << "Letters are: " << letters[i] << endl; 

輸出:

Letters are: Aa 

Letters are: Bb 

Letters are: Cc 

Letters are: /0 
+0

感謝您的反饋,aghipro!它解決了這個問題很長的路要走。 – DeSa

0

您的控制檯輸出顯示字母的地址,因爲你告訴它打印的指針,它指向一個內存地址。你需要一個循環來遍歷它。其餘的是pointer arithmetic

另外,「Aa」不是字符類型,而是「A」和「a」。所以,你也應該單獨定義它們;否則,您很可能會收到編譯器警告。請注意,最後一個字符應該是「\ 0」,而不是「/ 0」。如果你可以試試這個:

int main() 
{ 
    char *letters[79] = { "A","a","B", "b", "C", "c", "\0"} ; 
    int pause; 
    cout << "Letters are: "; 
    for(int i = 0; i < 79; i++){ 
     cout << letters[i]; 
    } 
    cout << endl << "Continue (Y or N)" << endl ; 
    cin >> pause; 
    cout << endl; 
    return 0; 
} 

然後,輸出是:

Letters are: AaBbCc 
+0

感謝你,aghilpro和Micheal之間的合作已經出現......現在,解決了彈出的「未處理的異常拋出的寫訪問衝突_first是nullptr」錯誤。 – DeSa