2017-02-16 110 views
-1

我想用二維數組顯示輸出。我打印10,11,12的值,但我只顯示一個數字0,1,2。不知道。如何用char數據類型輸出。我不想改變char值,因爲我需要將另一個X和Y分配給number [2] [1] ='X';C程序二維數組char值輸出爲2個字符

我的代碼是在這裏:

#include <stdio.h> 

int main(void){ 
    char number[3][4] = { 
     {'1','2','3','4'}, 
     {'5','6','7','8'}, 
     {'9','10','11','12'} 
    }; 

    printf("%c",number[2][1]); 

    return 0; 
} 

所以。我希望你能幫助我思考如何去做。 非常感謝你!

+0

這段代碼甚至沒有錯誤地編譯過嗎? –

+0

它顯示7警告消息。多字符字符常量。 – cyberoot

+0

你爲什麼不試着去理解警告的含義? –

回答

1

你在混合字符和字符串,他們是不一樣的。在c中,單引號用於獲取字符的ascii值,它被稱爲字符常量。

當你有多個字符被單引號包裹時,它被稱爲多字符常量,它的值是實現定義的,但它仍然是一個整數而不是字符串。

如果你想有一個字符串數組,那麼它會是這樣

#include <stdio.h> 

int main(void) 
{ 
    const char *number[3][4] = { 
     {"1", "2", "3", "4"}, 
     {"5", "6", "7", "8"}, 
     {"9", "10", "11", "12"} 
    }; 
    printf("%s\n", number[2][1]); 
    return 0; 
} 

還要注意,在"%s"而不是"%c"打印字符串。

+0

感謝你的好例子。任何其他方法沒有指針來打印這個? – cyberoot

+0

@cyberoot只是聲明一個char數組。 – RoadRunner

+0

@cyberoot避免指針是毫無意義的,因爲在許多情況下數組的行爲與指針類似。 –

1

將數字插入不帶引號的數組中。 char可以從-128 to 127 持有數量,還可以使用%d代替%c

#include <stdio.h> 
 

 
int main(void){ 
 
char number[3][4] = { 
 
    {1,2,3,4}, 
 
    {5,6,7,8}, 
 
    {9,10,11,12} 
 
}; 
 

 
printf("%d",number[2][2]); 
 

 
return 0; 
 
}

+1

要清楚,'%c'將一個'char'值轉換成它的ASCII表示並打印它。 '%d'將char值(或其他任何整數基本類型)轉換爲數值的字符串表示形式。它們都可以在'char'上使用,但有不同的輸出。 – Qix

+0

確切。在上面的代碼中,如果使用%c,則不會打印任何內容。但%d打印該號碼。 –

0

只需創建焦炭的3D陣列:

char number[3][4][3]; 

這允許3行和4列的字符串,每個字符串都有一個最大值長度爲3,包括空字節\0

使用類似'11'是無效的,因爲這不是字符,因爲char要求。您需要製作這些字符串,例如"11",或者只需使用int11。如果您決定使用字符串,則您的格式說明符必須爲%s,因爲您要打印char[]char*%c用於打印出char

你的程序是這樣的:

#include <stdio.h> 

#define ROWS 3 
#define COLS 4 
#define STRSIZE 3 

int main(void){ 
    char number[ROWS][COLS][STRSIZE] = {{"1","2","3","4"}, 
             {"5","6","7","8"}, 
             {"9","10","11","12"}}; 

    printf("%s",number[2][1]); 

    return 0; 
} 

注:使用const char *number[ROWS][COLS]更靈活,因爲你可以有任何字符串長度。你也可以聲明一個整數的二維數組,你可以簡單地使用int number[ROWS][COLS] = {{1, 2, 3, 4}, .......}

0

在C/C++語言中,char數據類型可以保存-128到+127範圍的值。該值可以存儲char c ='A';或char c = 65; (使用單引號字符或字符的ASCII值)。所以你不能在char變量中存儲'10'。如果您需要存儲ASCII值10(換行符'\ n'),則可以使用@Sagar V的答案。如果您需要存儲文本10(「10」注意不是單引號),則可以使用@Iharob Al Asimi的回答。

在你的代碼中你創建的是一個二維的char數組。它不能保存文本(字符串或char *)值。只要看看編譯器的警告。練習編寫0個警告代碼的習慣。

1

我建議

//如果未啓用字節定義 如此短

byte c[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 

炭在這種情況下,可能會產生混淆。