-5

2 つのコードを考えてみましょう。同じ値が i に割り当てられているにもかかわらず、なぜそれらは異なる出力を与えているのですか? 'i' は両方のコードで char です。

最初のコード --> (ここでは、値は i に直接割り当てられます)

void main()
 {
  char i=3;

  clrscr();
  switch(i)
     {
      default : printf("\nHi..\n");
          break;
      case 1:printf("\na");
         break;
      case 2:printf("\nb\n");
        break;
      case 3:printf("\nc");
          break;
      }
  }

2番目にprintf-scanfを使用--->

void main()
 {
  char i;
  printf("ENTER i");
  scanf("%c",&i);
  clrscr();
  switch(i)
     {
      default : printf("\nHi..\n");
                break;
      case 1:printf("\n\na");
         break;
      case 2:printf("\nb\n");
        break;
      case 3:printf("\nc");
          break;
      }
 }

2 番目のコードで入力として 3 を指定すると、出力として "Hi.." が得られます。2 つのコードの動作が異なる理由..??

4

4 に答える 4

1

stdin から文字を読み取った後:

scanf("%c",&i);

iには、値 3 ではなく 3 (51) の ASCII コードが含まれるため、 のdefault分岐が発生しswitchます。

解決策は、変数をとして宣言しint、使用することです

scanf("%d",&i);

それを読むために。

最初の例ではi、整数値に割り当てました3が、これは文字の割り当てとは異なり'3'ます。Cでは、char変数に値を代入すると、その値は特定の文字に固有のコードを表します(標準を考慮して)。

2 番目の例では、scanf関数は から文字を読み取りますstdin。これは、 の使用により文字として解釈され%c、読み取った文字に固有のコードが指定された変数に割り当てられます。

于 2013-07-16T19:42:19.747 に答える
1

最初に使用している

char i = 3

ただし、 scanf を使用する場合は、基本的に次を使用します。

char i = '3'

これら2つは異なる値を含んでいます

次の ASCII http://www.asciitable.com/を参照してください。

于 2013-07-16T19:43:02.593 に答える
0

これは switch ステートメントとは関係ありませんが、scanf関数とは関係ありません。

そのドキュメント、すなわちscanf(3) man ページを読んでください。非常に関連する質問に対するこの回答も参照してください。

char'3'は 3 ではなく、ASCII では51 としてエンコードされていることに注意してください。

すべての警告とデバッグ情報を有効にする方法を学び (例: を使用してコンパイルgcc -Wall -g)、デバッガーの使用方法を学びます (例: gdb)

于 2013-07-16T19:42:09.543 に答える
0

コードを次のように変更します

char i  -> int i;

scanf("%c",&i) -> scanf(" %d",&i);
于 2013-07-16T19:42:53.680 に答える