C语言 尽管条件无效[已关闭],while循环内的任务仍在运行

pobjuy32  于 2023-02-18  发布在  其他
关注(0)|答案(1)|浏览(97)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
我试图写一个程序来检查用户输入月份的有效性。下面是我的代码:

int monthcheck(int m) {
    int month = 0;
    while (m <= 0 || m > 12) {
        printf("Month must be between 1 and 12, re-enter month:");
        scanf("%d", &m);
    }
    if (m == 2) {
        month = 1; // February
    }
    if (m==1||m==3||m==5||m==7||m==8||m==10||m==12) month=2;
    return month;
}

    int main()
{
        int m;
        printf("Enter month");
        scanf("%d",&m);
        if (monthcheck(m)==0) printf("The month is valid");
        else if (monthcheck(m)==1) printf("The month is february");
}

下面是我的输出:

Enter month-2
Month must be between 1 and 12, re-enter month:13
Month must be between 1 and 12, re-enter month:2
Month must be between 1 and 12, re-enter month:2
The month is february

我的问题是:为什么程序仍然要求我输入另一个输入(在第4行),尽管它不满足while循环的条件?2帮助是感激的。3非常感谢!

3qpi33ja

3qpi33ja1#

调用第二个if语句

else if (monthcheck(m)==1) printf("The month is february");

if第一个if语句中的表达式

if (monthcheck(m)==0) printf("The month is valid");

计算为false。
两个if语句都调用main中声明的变量m不变的函数。
因此,当您第一次在函数中输入2时,函数将根据if语句返回值1

if (m == 2) {
    month = 1; // February
}

跳过main中第一个if语句的主体,第二个if语句获得控制权,再次调用变量m的初始值等于-2的函数,因为main中的变量没有更改。
现在,函数再次返回值1,第二个if语句的主体获得控制权。
此输出

Enter month-2
Month must be between 1 and 12, re-enter month:13
Month must be between 1 and 12, re-enter month:2

由第一个if语句的表达式中调用的第一个函数调用生成。
这个输出

Month must be between 1 and 12, re-enter month:2
The month is february

当用等于-2的变量m的相同值调用函数时,由在第二if语句的表达式中调用的第二函数调用生成。
至少应该编写if语句,如

if ( ( m = monthcheck(m) ) == 0 ) printf("The month is valid");
    else if ( m == 1 ) printf("The month is february");

虽然这个函数没有多大意义,因为它返回的值1也是有效的,但是我们不清楚使用这个函数要达到什么目的。

相关问题