| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 660 人关注过本帖, 1 人收藏
标题:用while获知for语句写一个月的日历
只看楼主 加入收藏
刘敏bccn
Rank: 2
等 级:论坛游民
帖 子:22
专家分:21
注 册:2015-9-29
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:9 
用while获知for语句写一个月的日历
用户指定当月天数和当月起始是星期几
比如31天,起始星期三



      1  2  3  4  5
6  7  8  9  10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
搜索更多相关主题的帖子: 用户 日历 
2015-10-11 15:08
达尔文
Rank: 2
等 级:论坛游民
帖 子:84
专家分:29
注 册:2015-8-22
收藏
得分:5 
#include<stdio.h>

int main()
{
    int num, i,a ;
   
    printf("Enter number of days in month:");
    scanf("%d",&num);
    printf("Enter starting day of the week(1 = Sum, 7 = Sat):");
    scanf("%d",&i);
   
    for (a = 1; a < i;a++){
        
        printf("   ");
    }
   
   
    for (a = 1; a <= num; a++){
        printf("%3d",a);
        if ((a + i - 1) % 7 == 0)
          printf("\n");
    }
   
   
   
    return 0;   
 }

能有一件喜欢的事很不容易,就坚持下去吧.....
2015-10-12 18:15
刘敏bccn
Rank: 2
等 级:论坛游民
帖 子:22
专家分:21
注 册:2015-9-29
收藏
得分:0 
太棒了,十分谢谢
2015-10-12 19:35
ztory
Rank: 2
等 级:论坛游民
威 望:1
帖 子:15
专家分:62
注 册:2015-10-12
收藏
得分:5 
程序代码:
#include<stdio.h>

int main() {
    int days = 0, firstDay = 0, weekFirst = 0, index = 1, i = 1;

    // 这个月有几天
    while (days == 0) {  
        printf("Enter how many days in this month(28,29,30,31):    ");
        scanf("%d",&days);
        if (days < 28 || days > 31) {
            printf("Wrong Number!\n");
            fflush(stdin);
            days = 0;
            continue;
        }
    }

    // 这个月第一天是周几
    while (firstDay == 0) {
        printf("This month's first day is (1-7):    ");
        scanf("%d",&firstDay);
        if (firstDay < 1 || firstDay > 7) {
            printf("Wrong Number!\n");
            fflush(stdin);
            firstDay = 0;
            continue;
        }
    }

    // 每周第一天是周一还是周日
    while (weekFirst == 0) {
        printf("Each week's first day is (1 = Monday, 7 = Sunday):    ");
        scanf("%d",&weekFirst);
            if (!(weekFirst == 1 || weekFirst == 7)) {
            printf("Wrong Number!\n");
            fflush(stdin);
            weekFirst = 0;
            continue;
        }
    }
    printf("\n");
    // 输出日历
    if (weekFirst == 1) {  // 每周第一天为周一
        printf(" Mon Tue Wed Thu Fri Sat Sun\n");
        while (i < firstDay) {
            printf("    ");
            i++;
        }
        while (index <= days) {
            printf("%4d", index);
            if ((index + i-1) % 7 == 0) {
                printf("\n");
            }
            index++;
        }
        printf("\n");
        printf("\n");
        return 0;
    } else {  // 每周第一天为周日
        printf(" Sun Mon Tue Wed Thu Fri Sat\n");
        while (i < firstDay + 1) {
            printf("    ");
            i++;
        }
        while (index <= days) {
            printf("%4d", index);
            if ((index + i - 1) % 7 == 0) {
                printf("\n");
            }
            index++;
        }
        printf("\n");
        printf("\n");
        return 0;  
    }
}
2015-10-12 20:04
刘敏bccn
Rank: 2
等 级:论坛游民
帖 子:22
专家分:21
注 册:2015-9-29
收藏
得分:0 
回复 4楼 ztory
fflush(stdin);  
这语句什么意思
2015-10-13 10:22
ztory
Rank: 2
等 级:论坛游民
威 望:1
帖 子:15
专家分:62
注 册:2015-10-12
收藏
得分:0 
回复 5楼 刘敏bccn
清除输入流,如果没有这一步,当输入非数字时,会陷入死循环
图片附件: 游客没有浏览图片的权限,请 登录注册

就这样
2015-10-13 13:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
fflush(stdin)是不保證必然有效的(標準也指出了不確保對輸入流有效,僅要求對輸出流有效),舊版本的vc中,一直都有效,但最近我發現在vs2015的vc中,它失效了。所以,現在最新的結論:不要再用這個辦法清空輸入流了。

授人以渔,不授人以鱼。
2015-10-13 13:50
ztory
Rank: 2
等 级:论坛游民
威 望:1
帖 子:15
专家分:62
注 册:2015-10-12
收藏
得分:0 
回复 7楼 TonyDeng
while((c = getchar()) != '\n' && c != EOF);  
现在是用这个吗?我查到的推荐这个
2015-10-15 16:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用ztory在2015-10-15 16:34:59的发言:

while((c = getchar()) != '\n' && c != EOF);  
现在是用这个吗?我查到的推荐这个

這個是可以的。

授人以渔,不授人以鱼。
2015-10-15 17:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不過這種也是有毛病的:假如當前輸入緩衝區中沒有數據,則getchar()會死等,這時程序“假死”。

授人以渔,不授人以鱼。
2015-10-15 19:45
快速回复:用while获知for语句写一个月的日历
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019360 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved