如何在C中循环修复此问题?

时间:2017-03-20 12:29:17

标签: c while-loop

我想询问用户一年,如果用户输入的数字大于0,程序将运行,完成后再询问一年,如果用户输入0,程序将结束。目前,代码完美但只有一次。所以我唯一需要修复的是while循环。当我启动代码时,它要求一年,我给一年,然后输出答案,但程序结束,而我希望它连续多年询问,直到我输入' 0' 0结束该计划。

这是我的代码:

#include<stdio.h>

/* 7.2 */
/* Julian Calendar */
int main()
{
    int year = 1;
    while (year > 0)
    {
        printf("Year: ");                /* Request year as input */
        scanf("%d", &year);              /* Accept/read year "year" */
        if (year <= 1582)
        {   
            if (year % 4 == 0)           /* If year is divisible by 4 */
            {
                if (year % 100 == 0)     /* If year is divisible by 100 */
                {
                    if (year % 400 == 0) /* If year is divisible by 400 */
                        printf("%4d is a leap year.\n", year);     /* Yes */
                    else
                        printf("%4d is not a leap year.\n", year); /* No */
                }
                else printf("%4d is a leap year.\n", year);        /* Yes */
            }
            else printf("%4d is not a leap year.\n", year);        /* No */
            return 0;
        }
        /* Gregorian Calendar */
        else if (year % 4 == 0)          /* If year is divisible by 4 */
            {
                if (year % 100 == 0)     /* If year is divisible by 100 */
                {
                    if (year % 400 != 0) /* If year is not divisible by 400 */
                        printf("%4d is not a leap year.\n", year); /* No */
                    else
                        printf("%4d is a leap year.\n", year);     /* Yes */
                }
                else printf("%4d is a leap year.\n", year);        /* Yes */
            }
            else printf("%4d is not a leap year.\n", year);        /* No */
     }
}

任何帮助将不胜感激,谢谢。 对不起我第一次回答这个问题并不清楚。

3 个答案:

答案 0 :(得分:2)

我唯一可以建议你这样的细节是这样的:

  do {
       //ask for year input...
       ....
       ....
      if (year==0) {
        flag++;
      }
    while(flag==0);

答案 1 :(得分:1)

我认为这个代码中唯一的错误是:

return 0;

如果您为year输入的值小于或等于&#34; 1582&#34;,则会导致return 0;代码行正在运行,实际上,结束你的while循环和main()函数。

您需要从while循环中删除该行,而不是将其作为main()的最后一行:

int main()
{
    int year = 1;
    while (year > 0)
    {
        // Rest of code
    }

    return 0;        // Put return statement here instead if inside the while() loop

}

除了之外,就像@SomeProgrammerDude在评论中提到的那样,你不需要像你的情况那样使用fflush(stdin),这会导致未定义的行为。

答案 2 :(得分:1)

for( ; ; ) {
  //ask for year
  //
  if(year<1) break;
  // do the work
}