5

こんにちは、私は現在 C 言語を学んでいますが、読んだ本の練習問題に少し問題があります。私のコードはこれです:

#include<stdio.h>
int main()
{
  unsigned char one=0;
  unsigned char two=0;
  printf("Quantity 1 = ");
  scanf("%d",&one);
  printf("Quantity 2 = ");
  scanf("%d",&two);
  printf("The value is %d",one);
  return 0;
}

oneの後の値ではなく、初期値の値が表示されるのはなぜscanfですか?

4

5 に答える 5

8

intタイプは、指定子および指定子と組み合わせ%dて使用​​する必要があります。そして符号なし整数。char%c%u

#include<stdio.h>
int main()
{
    unsigned int one=0; unsigned int two=0;
    printf("Quantity 1 = ");scanf("%u",&one);
    printf("Quantity 2 = ");scanf("%u",&two);
    printf("The value is %u",one);
    return 0;
}

基本的に、scanf入力から整数を読み取ろうとし、十分に大きくないメモリ位置に格納しようとするため、未定義の動作が発生します。

ここで良いリファレンスを見つけることができます。

ただし、入力タイプに文字を使用しようとする場合は、2 番目の数量を入力する機会が得られない理由を自問することをお勧めします (入力して Enter キー4を押した場合)。これは、secondscanfがエンター キーを文字として読み取るためです。また、(21 の場合) 入力しようとすると、最初の値と 2 番目の値が(まあ、ASCII 値で)21埋められます。21

そのため、注意してください。変数には常に正しいタイプを選択してください。

于 2013-08-21T19:00:56.060 に答える
1

scanf()戻り値を読み取って、正常に動作しているかどうかを確認します。クイックスタートについてはscanf()このリンクで詳細をお読みください。

あなたがしていることは、整数を使用"%d"してunsigned char変数に入力しているため、正常scanf()に機能しない可能性があります。

于 2013-08-21T19:03:07.190 に答える
1

変数oneを char として宣言しました。

unsigned char one=0;

しかし、あなたはscanf読むように言いましたint:

scanf("%d",&one);  /* %d means int */

Int は char (通常は 4 バイト対 1 バイト) よりも大きいため、説明した問題が発生します。

次のように変更scanfします。

scanf("%c",&one);  /* %c means char */

次に、値を出力するときに、文字も出力します。

printf("The value is %c",one); /* %c means char */
于 2013-08-21T19:11:52.987 に答える