2014-09-12 298 views
0

我有這樣的代碼:控制檯輸出笑臉

#include "stdafx.h" 
#include <iostream> 

typedef struct{ 
    int s1; 
    int s2; 
    char c1; 
    char* arr; 
}inner_struc; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    inner_struc myinner_struct; 
    myinner_struct.s1 = myinner_struct.s2 = 3; 
    myinner_struct.c1 = 'D'; 
    char arr[3] = {1,2,3}; 
    myinner_struct.arr = arr; 

    std::cout << "first array element: " << myinner_struct.arr[1] << std::endl; 
    return 0; 
} 

我不知道爲什麼我會得到一個笑臉,而不是第一個數組元素!我在這裏做錯了什麼?它編譯和但是輸出

第一個數組元素運行良好:「笑臉」

這是什麼意思? 我正在使用Visual Studio 2010.謝謝

+0

'char arr [3] = {1,2,3};'不是字符''1''''2' ''''3'',但不可打印的'\ 0x01','0x02','\ 0x03'。此外,對字符串使用'std :: string' – crashmstr 2014-09-12 19:26:12

回答

1

據,我所看到的,您要輸出的第一個數組元素。但相反,您正在打印第二個(數組從0開始索引,而不是1)。第二個元素是2.現在請看看this table,你可以看到:數字2是一個笑臉。問題在於你輸出的代碼是2,而不是'2'。爲了輸出一個平手,讓你的陣列看起來像這樣:

char arr[3] = {'1','2','3'}; 
+0

不是,在ASCII中,0x02是STX,它是不可打印的。在[CP437](http://en.wikipedia.org/wiki/Code_page_437)中,0x02是☻BLACK SMILING FACE。 – 2014-09-13 02:51:31

1

inner_struct.arr被聲明爲char *,這意味着它包含一個字符數組(字節)。你想要一個數組來保存數字1,2,3嗎?如果是這樣,請使用int。如果你想信,初始化數組:

char arr[3] = { 'a', 'b', 'c' }; 

KC

2

您outputing的第二個元素這個數組中:

char arr[3] = {1,2,3}; 

您分配它的值1 2和3,但是該變量是char類型的,所以它被解釋爲ascii。如果你在ascii圖表上查找哪個角色的值爲2,你會發現它是一張笑臉。所以它的確在做你要求它做的事情。

http://mathbits.com/MathBits/CompSci/Introduction/ASCIIch.jpg

什麼是你期望的輸出是什麼?如果你希望它是一個數字,那麼你將不得不將該數字的字符表示添加到數組中。即在123使用'1''2'代替,並'3'

+1

不是ASCII圖表,而是代碼頁850圖表。 – 2014-09-12 19:57:12