Powershell 嵌套的if语句不起作用

Powershell 嵌套的if语句不起作用,powershell,if-statement,Powershell,If Statement,我正在尝试编写寻找闰年的代码。但是,嵌套的if和else格式似乎有问题。请建议 [int]$x = Read-Host -Prompt 'Input a year : '; if ($x % 4 -eq 0) { Write-Host $x 'is a leap year'; if ($x % 100 -eq 0) { Write-Host $x 'is a leap year'; if ($x % 400 -eq 0) {

我正在尝试编写寻找闰年的代码。但是,嵌套的
if
else
格式似乎有问题。请建议

[int]$x = Read-Host -Prompt 'Input a year : ';

if ($x % 4 -eq 0) {
    Write-Host $x 'is a leap year';
    if ($x % 100 -eq 0) {
        Write-Host $x 'is a leap year';
        if ($x % 400 -eq 0) {
            Write-Host $x 'is a leap year';

        else {
            Write-Host $x 'is not a leap year';
        }
    }
    else {
        Write-Host $x 'is not a leap year';
    }
}
else {
    Write-Host $x 'is not a leap year';
}

我想这就是你想要的:

[int]$x = Read-Host -Prompt 'Input a year : ';

If ($x % 4 -eq 0) {
    if ($x % 400 -eq 0){
        Write-Host $x 'is a leap year';
    }
    Elseif ($x % 100 -eq 0){
        Write-Host $x 'is not a leap year';
    }
    Else{
        Write-Host $x 'is a leap year';
    }
}
Else {
    Write-Host $x 'is not a leap year';
}

我想这就是你想要的:

[int]$x = Read-Host -Prompt 'Input a year : ';

If ($x % 4 -eq 0) {
    if ($x % 400 -eq 0){
        Write-Host $x 'is a leap year';
    }
    Elseif ($x % 100 -eq 0){
        Write-Host $x 'is not a leap year';
    }
    Else{
        Write-Host $x 'is a leap year';
    }
}
Else {
    Write-Host $x 'is not a leap year';
}

正如Mathias提到的,您缺少了一个结束的卷曲括号。但是,您仍然可以大大简化代码并嵌套if语句,如下所示:

[int]$x = Read-Host -Prompt 'Input a year : ';

if($x % 4 -eq 0 -and ($x % 400 -eq 0 -or $x % 100 -ne 0))
{
    Write-Host "$x is a leap year"
}
else
{
    Write-Host "$x is not a leap year"
}
或者直接使用:

[System.DateTime]::IsLeapYear($x)

正如Mathias提到的,您缺少了一个结束的卷曲括号。但是,您仍然可以大大简化代码并嵌套if语句,如下所示:

[int]$x = Read-Host -Prompt 'Input a year : ';

if($x % 4 -eq 0 -and ($x % 400 -eq 0 -or $x % 100 -ne 0))
{
    Write-Host "$x is a leap year"
}
else
{
    Write-Host "$x is not a leap year"
}
或者直接使用:

[System.DateTime]::IsLeapYear($x)

“然而,似乎有什么不对劲”-似乎有什么不对劲(除了第一个
else
之前缺少的结束
}
)?您的期望是什么?我对代码进行了一些清理,以便更容易看出哪里出了问题。Pri 1:可读代码。Pri 2:可读代码…:-)非常感谢您的修复。刚刚意识到,发布的代码缺少一个括号,但控制台并没有对此抱怨,而是抛出了一年,结果都是$x是闰年,也就是$x不是闰年。我本可以使用IsLeapYear函数,并且正在考虑除了这段代码之外,该函数中还有什么其他功能……我在VB脚本中成功地使用了这段代码,所以我认为我也可以在PowerShell中编写。嗯,我对Powershell比较陌生。“但是,似乎有什么问题”-除了第一个
else
之前缺少的结束
}
之外,还有什么问题?您的期望是什么?我对代码进行了一些清理,以便更容易看出哪里出了问题。Pri 1:可读代码。Pri 2:可读代码…:-)非常感谢您的修复。刚刚意识到,发布的代码缺少一个括号,但控制台并没有对此抱怨,而是抛出了一年,结果都是$x是闰年,也就是$x不是闰年。我本可以使用IsLeapYear函数,并且正在考虑除了这段代码之外,该函数中还有什么其他功能……我在VB脚本中成功地使用了这段代码,所以我认为我也可以在PowerShell中编写。嗯,我对Powershell还比较陌生。世纪年不是闰年,除非它们能被400平分。(例如,1700年、1800年和1900年不是闰年,但1600年和2000年可以被400整除。)@jisaak更正if语句将是
如果($x%4-eq 0-和($x%400-eq 0-或$x%100-ne 0)){“闰年”}
谢谢Mathias,我只是想告诉他如何用
-或
/
>和
嵌套if语句@AniMenon我更正了我的答案…没有理由重新发明轮子。使用
IsLeapYear()
+如果($x%4-eq 0-和($x%400-eq 0-或$x%100-ne 0)){“闰年”}@马蒂亚斯-非常感谢你。我学到了一些非常新的东西。这一行很好。世纪年不是闰年,除非它们能被400平分。(例如,1700年、1800年和1900年不是闰年,但1600年和2000年可以被400整除。)@jisaak更正if语句将是
如果($x%4-eq 0-和($x%400-eq 0-或$x%100-ne 0)){“闰年”}
谢谢Mathias,我只是想告诉他如何用
-或
/
>和
嵌套if语句@AniMenon我更正了我的答案…没有理由重新发明轮子。使用
IsLeapYear()
+如果($x%4-eq 0-和($x%400-eq 0-或$x%100-ne 0)){“闰年”}@马蒂亚斯-非常感谢你。我学到了一些非常新的东西。这一行很好。