0
#include<stdio.h>
int main()
{
  int x,y; 
  printf("please input 2 numbers:\n");
  scanf("%d,%d",&x,&y);
  printf("Now the value for x is %d, and value for y is %d",x,y);
  return 1;
}

2つの数字を入力してそれらを区切ると,、期待どおりに機能します。

しかし、2345 という数字を 1 つ与えると、奇妙な結果が生じました。

x の値は 3456、y の値は 32767 です。

なぜなのかわかりません。

4

3 に答える 3

2

を呼び出すときはscanf()、その関数の戻り値をチェックして、成功したかどうかを確認する必要があります。私のシステムでは、割り当てられた入力項目の数を返すことが文書化されています。

于 2012-07-09T20:35:07.533 に答える
1

この奇妙な値は、メモリガベージです。Cでは、初期化されていないすべての変数(staticおよびを除くextern)はメモリのガベージを指します。この変数の値を使用すると、何が起こる可能性もUBあります。この変数の値を初期化し、からの戻り値を確認する必要がありますscanf()

@Michael Dorstがコメントで述べたように、いくつかのuncomum値(たとえば、-1)に設定し、呼び出した後x、それらの値も変更されているかどうかを確認します。xscanf()

于 2012-07-09T20:54:02.590 に答える
0

これは、scanf ステートメントが原因です。通常、scanf ステートメントの形式は次のとおりです。

scanf("%d %d",&x,&y); //without the commas inside the ""'s


しかし、あなたはこのフォーマットを作りました:

scanf("%d,%d",&x,&y); //with the commas inside the ""'s


これは、2 つの入力の間にコンマ区切りが必要であることを意味します。


次の試行を見てください

TRIAL1:(注: 入力は 2345 です)

Please input 2 numbers:
2345
Now the value for x is 2345, and value for y is 134513867.



TRIAL2: (注: 入力は 23,45 です)

Please input 2 numbers:
23,45
Now the value for x is 23, and the value for y is 45.



TRIAL3: (注: 入力は 23+45 です)

Please input 2 numbers:
23+45
Now the value for x is 23, and the value for y is 134513867.



したがって、試行によると、scanf("%d,%d",&x,&y); 入力にはコンマ区切りが必要です。1 回目と 3 回目の試行の出力に起こったことは、これらの y 値が変更されていない/初期化されていないため、y 変数にガベージが含まれていたことです。しかし、scanf の最初の %d のために、x 変数が正しい値を取得したようです。

于 2012-07-10T06:21:08.737 に答える