2017-02-16 5 views
-1

出力を2次元配列で表示したい。私は10,11,12の値を表示しますが、私は1桁の数字のみを表示します。いい考えはありません。 charデータ型で出力する方法。他のXとYをnumber [2] [1] = 'X'に代入する必要があるので、char値を変更したくありません。2文字のCプログラムの2次元配列のchar値出力

私のコードはここにある:

#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; 
} 

Soが私はあなたが私にそれをどうやって考えるかを助けてくれると願っています。 ありがとう!

+0

このコードはエラーなくコンパイルされましたか? –

+0

警告メッセージが表示されます。複数文字の定数です。 – cyberoot

+0

警告が何を意味するのか理解しようとしないのはなぜですか? –

答えて

1

文字を文字列と混在させていますが、それらは同じではありません。 cでは、文字のascii値を得るために一重引用符が使用されます。これは文字定数と呼ばれます。

複数の文字を単一引用符で囲んだ場合、それはマルチキャラクター定数と呼ばれ、値は実装定義ですが、それでも文字列ではなく整数です。

あなたは文字列の配列を持つようにしたい場合は、それはまた、文字列を印刷するには、代わりに"%c""%s"に気づくこの

#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; 
} 

ようなものです。

+0

あなたの良い例をありがとう。これを印刷するポインタを持たない他のメソッド? – cyberoot

+0

@cyberootはcharの3D配列を宣言するだけです。 – RoadRunner

+0

@cyberoot多くの状況で配列がポインタのように動作するため、ポインタを避けることは無意味です。 –

1

数字を引用符なしで配列に挿入します。 char-128 to 127 から数値を保持し、また、単に文字の3D配列を作成する代わりに、%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

%dを使用することができます。

3行と 4列を可能
char number[3][4][3]; 

の文字列であり、各文字列には最大値ヌルバイト\0を含む3の長さ。

'11'のようなものが無効です。という文字ではありません。charが必要です。 "11"のような文字列を作成するか、intという値11を使用するだけです。文字列を使用する場合は、char[]またはchar*を出力するため、フォーマット指定子は%sでなければなりません。 %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]を使用するには、より柔軟です。また、整数の2次元配列を宣言することもできます。単純に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の答え。

作成したコードは、2次元の文字配列です。テキスト(文字列またはchar *)の値を保持することはできません。コンパイラの警告を見てください。 0警告コードを書く習慣を練習してください。

1

バイトイマイチ は、このケースで

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

charが混乱することがありそう短い定義されている場合、私は

//を示唆しています。