簡體   English   中英

在C中執行if語句后提示用戶?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM