2014-05-04 28 views
0

所以我使用數組實驗時我遇到一點問題的C++數組不輸出全值

代碼:

#include <iostream> 
#include <windows.h> 

using namespace std; 

int main(int argc, char** argv) { 
char items[] = {'bread', 'water', 'crisps', 'sweets', 'vegetables'}; 
for (int i = 0; i < strlen(items); i++) { 
     cout << items[i] << endl; 
    } 
return 0; 
} 

發生了什麼事是,當代碼爲然,這只是輸出每個項目的最後一個字母,所以'd''s''s'''。我知道我很清楚在這裏做錯了什麼,但我無法弄清楚什麼。我一直在使用stackoverflow/google瀏覽這個問題,但顯然我所做的顯然是錯誤的,沒有人問過!

任何幫助或在特定文檔的正確方向微調將不勝感激!

謝謝。

+6

[使用編譯器警告(http://coliru.stacked-crooked.com/a/5be7eae80bb7b9af)(和錯誤)。 – chris

+1

另外,http://en.cppreference.com/w/c/string/byte/strlen – juanchopanza

+0

你是否知道''''和'''之間的區別? –

回答

1
  1. 需要一組字符指針。
  2. 需要用雙引號
  3. 在C++讀一本書

即代碼應該是

#include <iostream> 
#include <windows.h> 

using namespace std; 

int main(int argc, char** argv) { 
char *items[] = {"bread", "water", "crisps", "sweets", "vegetables"}; 
for (int i = 0; i < (sizeof(items)/sizeof(*items)); i++) { 
     cout << items[i] << endl; 
    } 
return 0; 
} 
+1

'const char * items []'會更好 – juanchopanza

+1

'sizeof(items)'是一個bug。 – kec

+0

感謝您的糾正 - 我的錯誤 –

0

任何在初始化列表中

{'bread', 'water', 'crisps', 'sweets', 'vegetables'}; 

這些項目是多字符文字。根據C++標準

一個多字符的文字,或含有 單個c炭在執行字符集不能表示一個普通字符文字,是 有條件地支持的,具有int類型,並且具有 實施 - 定義的值。

您需要使用字符串文字。我認爲,你想要的是以下

#include <iostream> 

int main(int argc, char** argv) 
{ 
    const char *items[] = { "bread", "water", "crisps", "sweets", "vegetables" }; 

    for (const char *s : items) std::cout << s << std::endl; 

    return 0; 
}