[英]Prompting the user after an if statement in C?
我是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塊才會被打印。 如果我輸入了無效的月份,仍然會提示我輸入另一個月份,但是如果輸入正確的數字,程序將終止。
您可以使用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");
}
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;
}
可以使用其他測試來檢測整數之后的溢出或數據。
如果您喜歡那種單線,這里是:
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
$
#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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.