2
#define TRUE    1
#define FALSE   0

int days_in_month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *months[]=
{
    " ",
    "\n\n\nJanuary",
    "\n\n\nFebruary",
    "\n\n\nMarch",
    "\n\n\nApril",
    "\n\n\nMay",
    "\n\n\nJune",
    "\n\n\nJuly",
    "\n\n\nAugust",
    "\n\n\nSeptember",
    "\n\n\nOctober",
    "\n\n\nNovember",
    "\n\n\nDecember"
};


int inputyear(void)
{
    int year;

    printf("Please enter a year (example: 1999) : ");
    scanf("%d", &year);
    return year;
}

int determinedaycode(int year)
{
    int daycode;
    int d1, d2, d3;

    d1 = (year - 1.)/ 4.0;
    d2 = (year - 1.)/ 100.;
    d3 = (year - 1.)/ 400.;
    daycode = (year + d1 - d2 + d3) %7;
    return daycode;
}


int determineleapyear(int year)
{
    if(year% 4 == FALSE && year%100 != FALSE || year%400 == FALSE)
    {
        days_in_month[2] = 29;
        return TRUE;
    }
    else
    {
        days_in_month[2] = 28;
        return FALSE;
    }
}

void calendar(int year, int daycode)
{
    int month, day;
    for ( month = 1; month <= 12; month++ )
    {
        printf("%s", months[month]);
        printf("\n\nSun  Mon  Tue  Wed  Thu  Fri  Sat\n" );

        // Correct the position for the first date
        for ( day = 1; day <= 1 + daycode * 5; day++ )
        {
            printf(" ");
        }

        // Print all the dates for one month
        for ( day = 1; day <= days_in_month[month]; day++ )
        {
            printf("%2d", day );

            // Is day before Sat? Else start next line Sun.
            if ( ( day + daycode ) % 7 > 0 )
                printf("   " );
            else
                printf("\n " );
        }
        // Set position for next month
        daycode = ( daycode + days_in_month[month] ) % 7;
    }
}


int main(void)
{
    int year, daycode, leapyear;

    year = inputyear();
    daycode = determinedaycode(year);
    determineleapyear(year);
    calendar(year, daycode);
    printf("\n");
}

此代码在终端中生成输入年份的日历。我的问题是如何将其转换为 Objective-C 语法而不是 C 语法。我确定这是一个简单的过程,但我对 Objective 来说还是个新手 - c 我需要它来完成一个可可项目。此代码将日历输出为一系列连续的字符串,直到最后一个月。soo 我如何输入日历而不是在终端中创建日历,一系列 NSMatrixes 取决于输入的年份。

希望有人能帮助我,谢谢或一切帮助(你是完成程序的功劳):)(日历只是我制作的程序的一小部分,它是重要的部分之一!!)

4

2 回答 2

2

我建议查看NSCalendar提供此功能以及更多功能的标准类。

例如,要计算给定日期一个月(或一周)的天数,您可以使用以下方法:

- (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date

一些可能也有帮助的课程:NSDateComponentsNSDateFormatter.

另请注意,c 代码在objective-c 中完全有效,因此您的程序应该能够正常运行(除非您可能需要更改其输入)

于 2010-05-20T14:49:28.827 回答
0

Objective-C 是 C 的严格超集。所以你可以只使用你的代码,至少是逻辑部分。当然,您需要为 GUI 调用转换输入 ( scanf) 和输出 ( )。printf

也就是说,不要重新发明轮子。您可以使用NSDatePicker,这是一个现成的 UI 类来显示和选择日期。请参阅文档

于 2010-05-20T18:36:38.970 回答