2013-02-03 89 views
4

我正在嘗試做一些功課,並且遇到問題。我的作業是C++數組中的問題

•使用for循環打印數組的內容。

輸出應該出現這樣的:ARRAY

作者

打印內容A B C d E F G H I J K L M N 2 O P Qř式T U V W X YŽ

我有我的代碼,它是工作。但是,在我的字母表末尾出現了一堆隨機字符和符號。有什麼你們看到我做錯了嗎?

這是我的代碼。

#include <iostream> 
using std::cin; 
using std::cout; 
using std::endl; 

// main FUNCTION BEGIN PROGRAM EXECUTION 
int main() 
{ 
// ALPHABET ARRAY DECLARATIONS 
char Letters [26] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; 


for (int i = 0; i < 27 ; i++) 
{ 
cout<< "PRINTING CONTENTS OF ARRAY" << endl; 
cout<< "===============================" << endl; 
cout<< Letters << " "; 
cout<< endl; 
break; 
} 
return 0 ; 
} // ***END main FUNCTION*** 

基本上這個問題簡單地說就是它像我想要的那樣打印A-Z,但也打印Z後的一堆隨機符號。任何想法?由於我是新手,我相信這可能很簡單。 在此先感謝!

+0

您有關斷由 - 一個錯誤。 – Rapptz

+1

但除此之外,對嗎?傑克實際上並沒有循環。 '<<'是否需要一個以空字符結尾的字符數組? – Thomas

+4

你也沒有理由在裏面有'break'。你知道這個打破了for循環嗎? – Rapptz

回答

1

要刪除「的隨機字符和符號串」,加NULLetters末:

char Letters [] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
        'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 
        'U', 'V', 'W', 'X', 'Y', 'Z', 0}; 

這是將打印的字母倍,這可能不是什麼你要。 編輯:前面的陳述錯誤 - 我錯過了你的break;

+1

這實際上解決了我的問題非常感謝!我轉換了信件[26]至[27]加了0,它的功能就像一個魅力!我很感激! – Jack

+0

@Jack如果最終得到27個打印輸出而不是一個,這怎麼可能解決您的問題? ;-) – dasblinkenlight

+1

@dasblinkenlight,break語句:( – chris

0

數組索引開始從0N,你必須在信件26個字符,索引開始從025

cout<< "PRINTING CONTENTS OF ARRAY" << endl; 
cout<< "===============================" << endl; 

for (int i = 0; i < 26 ; i++) 
{ 
    cout<< Letters[i] << " "; 
} 
cout<< endl; 

break;通常用來打破一定條件下forwhile循環。你for循環finishes smoothly, you don't need a break`在循環中。

+0

感謝billz,我改變了它,但它仍然給我同樣的問題。在Z之後,它正在打印一堆符號。 – Jack

+0

@Jack,對不起,我有錯別字,我修復了它 – billz

4

當您將一個字符數組傳遞給輸出流時,該數組必須以null結尾。你的數組不是null結尾;這就是爲什麼你最終會得到額外的垃圾。

然而,這是不是你的解決方案的主要問題:你需要指數字母,就像這樣:

cout << Letters[i] << " "; 

最後,26個字母,索引去零到25,所以循環延續條件應該是i < 26i != 26i <= 25

+0

謝謝。約瑟夫評論告訴我如何去做你說的!我感謝幫助! – Jack

+1

啊我明白你的意思了!我會檢查一下,看看會發生什麼。我得到了期望的打印輸出,但從我的理解中仍然是錯誤的。^_^ – Jack

+0

我做了修改Letters [i]和i <26,它只是簡單地打印A現在 – Jack

1

在數組末尾添加一個空值。 c函數檢查空字符是否終止。用C

0

字符數組++被空終止,當你intialise陣列

char Letters [26] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; 

您沒有考慮到您需要1個更多的空間帳戶從基於零的索引,因此開始「\ 0」,以終止陣列,其會導致不確定的行爲

由於打印信件[0]到信件[26],則再次導致在編寫信件[26]未定義的行爲因此垃圾值的出現