3

私はCをまったく初めて使用します。現在、基本を習得しようとしており、scanfからデータを配列に直接読み取る際に問題があります。

現在、コードは次のようになっています。

int main()
{
    int array[11];
    printf("Write down your ID number!\n");
    scanf("%d", array);
    if (array[0]=1)
    {
        printf("\nThis person is a male.");
    }
    else if (array[0]=2)
    {
        printf("\nThis person is a female.");
    }
    return 0;
}

ご覧のとおり、プログラムの目的は ID を要求し、最初の数字からその人物が男性 (1) か女性 (2) かを判断することです。ただし、配列が適切に入力されていないため、動作させることができないようです (これは、scanf の直後に printf(array) を介してチェックされ、乱数になります)。このようにプログラムを実行すると、読み取った数字に関係なく、その人は男性であるという結果が得られます。

些細なことのように思えるかもしれませんが、私は問題を理解できませんでした。

4

4 に答える 4

16

if (array[0]=1)する必要がありますif (array[0]==1)

と同じelse if (array[0]=2)です。

割り当ての式は、割り当てられた値を返すことに注意してください。この場合if (array[0]=1)常に true=になります。そのため、 to を変更しない場合、if ステートメントの下のコードが常に実行されます==

=代入演算子です。代入ではなく、比較します。だからあなたが必要==です。

もう1つ、整数が1つだけ必要な場合、なぜ配列を使用するのですか? あなたもしたいかもしれませんscanf("%d", &array[0]);

于 2013-04-30T12:19:09.090 に答える
6
int main()
{
  int array[11];
  printf("Write down your ID number!\n");
  for(int i=0;i<id_length;i++)
  scanf("%d", &array[i]);
  if (array[0]==1)
  {
    printf("\nThis person is a male.");
  }
  else if (array[0]==2)
  {
    printf("\nThis person is a female.");
  }
  return 0;
}
于 2013-04-30T12:21:40.607 に答える
1

%d変換指定子は、1 つの 10 進整数のみを変換します。配列を渡していることを認識していないため、それに基づいて動作を変更することはできません。変換指定子は、変換を指定します。

配列の指定子はありません。明示的に指定する必要があります。4 つの変換の例を次に示します。

if(scanf("%d %d %d %d", &array[0], &array[1], &array[2], &array[3]) == 4)
  printf("got four numbers\n");

これには、入力数値の間に空白が必要であることに注意してください。

ID が 11 桁の数字の場合は、文字列として扱うのが最適です。

char id[12];

if(scanf("%11s", id) == 1)
{
  /* inspect the *character* in id[0], compare with '1' or '2' for instance. */
}
于 2013-04-30T12:19:48.977 に答える
0

使用する

scanf("%d", &array[0]);

==代わりに比較に使用します=

于 2013-04-30T12:20:59.433 に答える