0
int monthentered = 0;
int dayentered = 0;
int year = 0000;
int [] month = new int [12];
int [] day = new int [31];
bool leap = false;

for (int x = 0; x <= 11; x++)
{
    month[x] = x+1;
}

for (int x = 0; x <= 30; x++)
{
    day[x] = x+1;
}
Console.WriteLine("Please enter a year...");
year = (Convert.ToInt16(Console.ReadLine()));
Console.WriteLine("{0}", year);

Console.WriteLine("Please enter a month...");
monthentered = (Convert.ToInt16(Console.ReadLine()));

Console.WriteLine("Please enter a day...");
dayentered = (Convert.ToInt16(Console.ReadLine()));

while (monthentered == 01 || 03 || 05 || 07 || 08 || 10 || 12)
{
    while (dayentered == 31)
    {
        Console.WriteLine("There are only 30 days in this month please re-enter your day...");
        dayentered = (Convert.ToInt16(Console.ReadLine()));
    }
}

while (monthentered == 02)
{
    while (dayentered > 28)
    {
        Console.WriteLine("There are only 28 days in this month please re-enter your day...");
        dayentered = (Convert.ToInt16(Console.ReadLine()));
    }
}

Console.WriteLine("{0}/{1}/{2}", dayentered, monthentered, year);
Console.ReadKey();

行に何か問題がありwhile (monthentered == 01 || 03 || 05 || 07 || 08 || 10 || 12)ますか? よくわからないエラーが出ます。"Operator '||' cannot be applied to operands of type 'bool' and 'int'"

助けてください。

4

9 に答える 9

3
while(monthentered == 01 || monthentered == 03 || monthentered == 05 || monthentered == 07 || monthentered == 08 || monthentered == 10 || monthentered == 12)

|| 間のすべての操作 および && は、すべての操作が個別に計算されるため、ブール値 (つまり、完全なテスト) にレンダリングする必要があります。

于 2012-11-22T16:20:57.347 に答える
2

今は次のようなものwhile(bool || int || int)です。次のようなものが必要だと思います。

while (monthentered == 1 || monthentered == 3 || monthentered == 5 /*|| ...*/)

毎回変数の値を確認する必要があるため、while(bool || bool || bool)etcになります

また、有効な月のコレクションを作成し、入力した数字がその中にあるかどうかを確認することもできます。

于 2012-11-22T16:21:29.443 に答える
2

演算子 '||' タイプ「bool」および「int」のオペランドには適用できません

||数字には使用できません。使用している各部分||bool.

条件は次のようになります。

while (monthentered == 01 || 
       monthentered == 03 || 
       monthentered == 05 || 
       monthentered == 07 || 
       monthentered == 08 || 
       monthentered == 10 || 
       monthentered == 12)

より読みやすいオプションは次のとおりです。

var validMonths = new int[] { 1, 3, 5, 7, 8, 10, 12 };

while(validMonths.Contains(monthentered))
于 2012-11-22T16:21:46.067 に答える
1

を with演算子intと比較することはできません。は(真/偽) で、残りはです。bool||monthentered == 01boolints

そのため、while を次のように変更します。

int[] allAllowedMonths = new[]{ 1, 3, 5, 7, 8, 10, 12 };
while (allAllowedMonths.Contains( monthentered ))
{
    // ...
}
于 2012-11-22T16:22:39.847 に答える
1

そのはず

while (monthentered  == 01 ||monthentered  == 03 || monthentered  ==05 || monthentered  ==07 || monthentered  ==08 || monthentered  ==10 || monthentered  ==12)
于 2012-11-22T16:20:49.800 に答える
0

C# は true/false 式のみを受け入れます!

while (monthentered == 01 || monthentered ==03 || monthentered ==05 || monthentered ==07 || monthentered ==08 || monthentered ==10 || monthentered ==12) 
于 2012-11-22T16:22:13.090 に答える
0

そのはず

while (monthentered == 01 || 
       monthentered == 03 || 
       monthentered == 05 || 
       monthentered == 07 || 
       monthentered == 08 || 
       monthentered == 10 || 
       monthentered == 12)

 {  
   //code here
 }
于 2012-11-22T16:22:36.990 に答える
0

コンパイルするが機能しないコードにつながる直接的な答え:使用する必要があります

(monthentered == 01 || monthentered == 03 || monthentered == 05 ||
 monthentered == 07 || monthentered == 08 || monthentered == 10 ||
 monthentered == 12)

さらなる問題:

  • あなたのコードでは、ほとんどの月で 32 日以上が許可されています。
  • while月の値を決して変更しないため、月のループは決して終了しません。if代わりにステートメントを使用してください。

追加のヒント:DateTime.DaysInMonth月の数を手動で確認するのではなく、各月と年に許可される最大数を取得するために使用できます。これにより、うるう年にも対応できます。

于 2012-11-22T16:22:39.877 に答える