-1

変数 daysInMonth を初期化する必要があることは理解していますが、その日の有効性を判断するために必要な時点での値がユーザーの入力に依存しているため、その方法がわかりません。

int daysInMonth; //number of days in month read in

daysInMonth を決定するコードの一部

if(month == 1)
   daysInMonth = 31; 

エラーが発生するコード

//User number of days in month to check to see if day is valid
if(day > 0 && day <= daysInMonth)
   dayValid = true;
else
   dayValid = false;
4

5 に答える 5

1

の他の値に対して daysInMonth が何であるべきかを考えてくださいmonth。を追加するelseか、 の場合がありますelse if。初期化または例外を使用して、すべての可能な値がカバーされていることを確認してください。

于 2014-10-07T17:28:32.477 に答える
0

変数の初期化を保証する必要があります。

int daysInMonth; //number of days in month read in
if(month == 1)
    daysInMonth = 31; 

これは、月が 1 の場合にのみ変数を初期化します。1 でない場合は、まだ初期化されていません。

この問題を解決するには、次の 2 つの方法があります。

1.最初に変数を初期化する

値にデフォルト値を与えることで、そうではないことを保証しますnull

int daysInMonth = 0; //number of days in month read in
if(month == 1)
    daysInMonth = 31; 

2. 分岐ごとに変数を初期化する

意図的に定義しないことで、パスが欠落しているかどうかをコンパイラに通知させることができます。これは、変数が特定の値を持つ複雑な if/else ステートメントに役立つ場合があり、たとえば、-1 であるべき状態に対して誤って 0 にデフォルト設定されることは望ましくありません。

int daysInMonth; //number of days in month read in
if(month == 1)
    daysInMonth = 31; 
else if(month == 2)
    daysInMonth = 28; 
//...
else if(month == 12)
    daysInMonth = 31; 
else 
    daysInMonth = -1; 
于 2014-10-07T17:31:03.693 に答える