在C语句中使用if语句后提示用户?

时间:2015-10-01 18:17:13

标签: c if-statement user-input

我是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块。如果我输入无效月份,我仍然会被提示输入另一个月,但如果输入正确的号码,程序将终止。

4 个答案:

答案 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;
}