- 已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是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非常感谢!
1条答案
按热度按时间3qpi33ja1#
调用第二个if语句
if第一个if语句中的表达式
计算为false。
两个if语句都调用main中声明的变量
m
不变的函数。因此,当您第一次在函数中输入
2
时,函数将根据if语句返回值1
跳过main中第一个if语句的主体,第二个if语句获得控制权,再次调用变量
m
的初始值等于-2
的函数,因为main中的变量没有更改。现在,函数再次返回值
1
,第二个if语句的主体获得控制权。此输出
由第一个if语句的表达式中调用的第一个函数调用生成。
这个输出
当用等于
-2
的变量m
的相同值调用函数时,由在第二if语句的表达式中调用的第二函数调用生成。至少应该编写if语句,如
虽然这个函数没有多大意义,因为它返回的值
1
也是有效的,但是我们不清楚使用这个函数要达到什么目的。