我是C的新手并试图编写一个简单的程序。我要求用户输入一个月。我知道如何检查它是否是一个有效的月份,但如果ISNT是一个有效的月份,我不知道如何提示用户输入另一个月。这是我想出的: 编辑:更新的代码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int mon;
do {
printf("Enter a month(1=Jan, ..., 12=Dec: ");
scanf("%d", &mon);
} while (mon < 1 || mon > 12);
printf("Not a valid month.");
}
但是现在只有在输入1-12之间的数字时,才会打印我的while块。如果我输入无效月份,我仍然会被提示输入另一个月,但如果输入正确的号码,程序将终止。
答案 0 :(得分:0)
您可以按如下方式使用do-while循环:
int mon;
do{
printf("Enter a month(1=Jan, ..., 12=Dec): \n");
scanf("%d", &mon);
} while(mon < 1 || mon > 12);
如果输入正确,它将继续,并在错误输入时再次循环。
根据您更新的代码,您将在用户输入有效时打印消息。
你可能想要这样的东西:
for (;;)//infinite loop (no condition)
{
printf("Enter a month(1=Jan, ..., 12=Dec): ");
scanf("%d", &mon);
if (mon < 12 && mon > 0) // if inside the range (1-12) then break the loop and continue
break;
else // otherwise show the error message and repeat again
printf("Error message \n");
}
答案 1 :(得分:0)
scanf()
对输入错误不友好。我建议使用fgets()
,然后解析。
int main(void) {
int mon;
for (;;) {
char buf[100];
printf("Enter a month(1=Jan, ..., 12=Dec): ");
fflush(stdout);
if (fgets(buf, sizeof buf, stdin) == NULL)
return 1; // no more input
if (sscanf(buf, "%d", &mon) == 1 && mon >= 1 && mon <= 12) {
break; // Success!
}
printf("Not a valid month ");
}
return 0;
}
可以使用额外的测试来检测整数后的溢出或数据。
答案 2 :(得分:0)
如果你喜欢oneliners,那就是:
while(printf("Enter Month\n") && scanf("%d",&mon) && (mon < 1 || mon > 12));
<强>码强>
main()
{
int mon;
while(printf("Enter Month\n") && scanf("%d",&mon) && (mon < 1 || mon > 12));
}
<强>输出:强>
$ ./a.out
Enter Month
0
Enter Month
99
Enter Month
98
Enter Month
44
Enter Month
13
Enter Month
12
$
答案 3 :(得分:-1)
#include<stdio.h>
int main()
{
int month, condition = 0;
do
{
printf("enter month");
scanf("%d", &month);
if (month < 1 || month>12)
condition = 1;
else
condition = 0;
} while (condition == 1);
return 0;
}