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

これがライブ出力です

4

5 に答える 5

8

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フォーマット指定子の使用に注意してください。)

于 2012-12-27T11:11:08.303 に答える
3

あなたが書いたとき、あなたは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'。これは文字配列専用です。

于 2012-12-27T11:23:35.050 に答える
3

50のASCIIコードです'2'

修正したい場合は、と交換'2'してください。2

Cのような文字リテラルを使用する場合、'2'実際にはそれらを整数型と見なします。フォーマット指定子を使用して%d出力すると、値を整数として出力するようにCに指示します。

次のような配列要素を保持する場合は、コンソールでを取得するために'2'printf形式をに変更する必要があります。%c2

于 2012-12-27T11:11:13.417 に答える
1

この行

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'};
于 2012-12-27T11:19:40.297 に答える
1

整数ではなく文字を割り当てています。

ノート

'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;
}
于 2012-12-27T11:19:53.573 に答える