首页 > 解决方案 > 当我写信时,它会打印出我的分段错误(核心转储)和很多次

问题描述

很抱歉打扰你,我知道这里有很多类似的问题,但我真的不明白,我是这门语言的新手,谢谢你的理解,再次抱歉。这是我的代码:

#include <stdio.h>


int main()
{
    int year , month;

    printf("Which year? : ");
    scanf("%i",&year);
    
    if ( year < 0 )
    {
        printf("Wrong input for year , try again !\n");
        return main();
    }

    printf("Whcih month? : (1-12) ");
    scanf("%i",&month);

    if ( month < 1 || month > 12 )
    {
        printf("Wrong input for month , try again !\n");
        return main();
    }

    if ( month == 1 )
    {
        printf("In January 31 days\n");
    }
    
    else if ( month == 2 )
    {
        if (((year % 4 == 0) && (year % 100 != 0 )) || (year % 400 == 0))
        {
            printf("In February 29 days ( this year is leap )\n");
        }
        
        else
        {
            printf("In February 28 days ( common year )\n");
        }
        
    }
    
    else if ( month == 3 )
    {
        printf("In March 31 days\n");
    }
    
    else if ( month == 4 )
    {
        printf("In April 30 days\n");
    }
    
    else if ( month == 5 )
    {
        printf("In May 31 days\n");
    }
    
    else if ( month == 6 )
        {
                printf("In June 30 days\n");
        }
    
    else if ( month == 7 )
        {
                printf("In July 31 days\n");
        }
    
    else if ( month == 8 )
        {
                printf("In August 31 days\n");
        }
    
    else if ( month == 9 )
        {
                printf("In September 30 days\n");
        }
    
    else if ( month == 10 )
        {
                printf("In October 31 days\n");
        }
    
    else if ( month == 11 )
        {
                printf("In November 30 days\n");
        }
    
    else if ( month == 12 )
        {
                printf("In December 31 days\n");
        }

}

当我输入要编程的字母时返回 main 。但它打印了很多次“哪一年?:哪个月?:(1-12)月份输入错误,再试一次!” 和“分段错误(核心转储)”为什么?

标签: c

解决方案


当用户输入错误时,尝试使用循环重复并再次请求一个值。您可以使用“do-while”循环,在用户提交错误时询问输入。试试下面的代码,它检查月份和年份的输入,如果有一个字母或一个错误的数字:

#include <stdio.h>

int main()
{
    int year , month, res;
    //checks years
    printf("Which year? : ");
    do {
        res = scanf("%d", &year);
        if (res != 1) {
            printf("Error reading number, try again:\n");
            while (getchar() != '\n') {
                continue;
            }
            continue;
        } else {
            break;
        }
    }while (1);
    if (year < 0){
        do{
            printf("Year must be positive, Try again: ");
            do{
                res = scanf("%d", &year);
                if (res != 1) {
                printf("Error reading number, try again:\n");
                while (getchar() != '\n') {
                    continue;
                }
                    continue;
                } else {
                    break;
                }
            }while(1);
        }while(year < 0);
    }

    printf("Which month? : (1-12) ");
    //checks months
    do {
        res = scanf("%d", &month);
        if (res != 1) {
            printf("Error reading number, try again:\n");
            while (getchar() != '\n') {
                continue;
            }
            continue;
        } else {
            break;
        }
    }while (1);
    if (month < 1 || month > 12){
        do{
            printf("Year must be positive, Try again: ");
            do{
                res = scanf("%d", &month);
                if (res != 1) {
                printf("Error reading number, try again:\n");
                while (getchar() != '\n') {
                    continue;
                }
                    continue;
                } else {
                    break;
                }
            }while(1);
        }while(month < 1 || month > 12);
    }

    if ( month == 1 )
    {
        printf("In January 31 days\n");
    }

    else if ( month == 2 )
    {
        if (((year % 4 == 0) && (year % 100 != 0 )) || (year % 400 == 0))
        {
            printf("In February 29 days ( this year is leap )\n");
        }

        else
        {
            printf("In February 28 days ( common year )\n");
        }

    }

    else if ( month == 3 )
    {
        printf("In March 31 days\n");
    }

    else if ( month == 4 )
    {
        printf("In April 30 days\n");
    }

    else if ( month == 5 )
    {
        printf("In May 31 days\n");
    }

    else if ( month == 6 )
        {
                printf("In June 30 days\n");
        }

    else if ( month == 7 )
        {
                printf("In July 31 days\n");
        }

    else if ( month == 8 )
        {
                printf("In August 31 days\n");
        }

    else if ( month == 9 )
        {
                printf("In September 30 days\n");
        }

    else if ( month == 10 )
        {
                printf("In October 31 days\n");
        }

    else if ( month == 11 )
        {
                printf("In November 30 days\n");
        }

    else if ( month == 12 )
        {
                printf("In December 31 days\n");
        }
    return 0;
}

推荐阅读