私は単純なcプログラムを作成しており、以下のプログラムの出力は2になるはずですが、50が表示されます理由がわかりません(私はcの初心者です)どこが欠けているか教えてください
#include<stdio.h>
int main(int argc, char** argv) {
int a[4]={'1','2','2','\0'};
printf("The value of a is %d",a[1]);
return 0;
}
私は単純なcプログラムを作成しており、以下のプログラムの出力は2になるはずですが、50が表示されます理由がわかりません(私はcの初心者です)どこが欠けているか教えてください
#include<stdio.h>
int main(int argc, char** argv) {
int a[4]={'1','2','2','\0'};
printf("The value of a is %d",a[1]);
return 0;
}
ASCII文字コードを使用して配列を初期化しました。 '2'
整数値は50です。
配列を次のように初期化します
int a[4]={1,2,2,0};
整数1、2、2、0を含める場合。または
#include<stdio.h>
int main(int argc, char** argv) {
char a[4]="121";
printf("The value of a is %c",a[1]);
return 0;
}
文字列として扱うことができる文字の配列が必要な場合。(ここでは%c
フォーマット指定子の使用に注意してください。)
あなたが書いたとき、あなたはint a[4]={'1','2','2','\0'};
実際に数字の1と2のASCIIコードで配列を初期化しました。これはそれらを一重引用符で囲み、整数ではなく文字にしたためです。したがって、配列は実際に値を取ります。int a[4]={49,50,50,0};
これを修正するには、引用符なしで整数を記述する必要があります。
int a[4]={1,2,2,0};
また、整数配列はで終わる必要がないことにも注意してください'\0'
。これは文字配列専用です。
50
のASCIIコードです'2'
。
修正したい場合は、と交換'2'
してください。2
Cのような文字リテラルを使用する場合、'2'
実際にはそれらを整数型と見なします。フォーマット指定子を使用して%d
出力すると、値を整数として出力するようにCに指示します。
次のような配列要素を保持する場合は、コンソールでを取得するために'2'
printf形式をに変更する必要があります。%c
2
この行
int a[4]={'1','2','2','\0'};
長さ4の整数配列を作成し、右から中括弧からの整数をその中に入れるようにコンパイラーに指示します。
の文字C
は1バイト整数で1
、の文字で1
あり、ASCIIコードの整数値、つまり50を意味します。したがって、配列の最初の要素は50の値を取得します。
修正するには、次のように書く必要があります
int a[4]={1,2,2,0};
0
これは単なる数値であるため、配列の終了マーカーとして機能することはできません。
あなたが122
出力を取得することを想定している場合は、
char a[4]={'1','2','2','\0'};
printf("The value of a is %s",a);
の文字列は、終了記号としてのC
文字配列であるためです。0
また、コンパイラに値をカウントさせることもできます
char a[]={'1','2','2','\0'};
整数ではなく文字を割り当てています。
ノート
'2' means char use %c
2 manes int use %d
"2" means string. use %s
すべてが異なります:
あなたのコードでは、2を印刷するのが好きです:
int main(int argc, char** argv) {
char a[4]={'1','2','2','\0'};
printf("The value of a is %c",a[1]);
return 0;
}