天花板编程手把手计划-第1期-第8天-打卡

题目

原问题链接
用你学过的C语言知识,设计一个番茄钟程序。要求满足如下功能:

可以设置倒计时时间
拥有倒计时效果
倒计时结束后有提醒
使用记录保存在文件中

解题思路

  • 计时效果
    因为程序计时部分运行时间几乎可以忽略,可以用Sleep()函数倒数计时;
  • 结束提醒
    引入媒体库播放声音
  • 保存文件
    freopen("record.txt", "a", stdout);

源码

#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <tchar.h>                    // 没这个库识别不出"_T"
#include <mmsystem.h>                // MCI库,媒体控制接口
#pragma comment(lib,"Winmm.lib")    //编译时自动链接 winmm 库.

int getTime(int &hours, int &minutes, int &seconds);
void record(int hours, int minutes, int seconds);
void timekeeper(int totalTimes);

void main()
{
    mciSendString(_T("open \"..\\music\\结束.wav\" alias musicTip "), NULL, 0, NULL);//加载结束的声音
    int hours, minutes, seconds;
    int totalTimes;
    totalTimes = getTime(hours, minutes, seconds);//获取倒计时
    timekeeper(totalTimes);//倒计时函数
    record(hours, minutes, seconds);//用文本记录结果
    system("pause");
}

int getTime(int &hours, int &minutes, int &seconds) //脑子短路用成了C++ 的引用
{
    int totalTimes;
    printf("按如下格式输入倒计时\n");
    printf("0:14:26\n");
    scanf("%d:%d:%d", &hours, &minutes, &seconds);
    while (hours > 24 || minutes >= 60 || seconds >= 60)//检查格式
    {
        printf("输入格式错误,请重新输入\n");
        scanf("%d:%d:%d", &hours, &minutes, &seconds);
    }
    printf("按下任意键开始计时\n");
    getch();
    totalTimes = hours * 60 * 60 + minutes * 60 + seconds;
    return totalTimes;
}

void record(int hours, int minutes, int seconds)
{
    freopen("record.txt", "a", stdout);//注意“a”表示追加文本。使用 “w” 就会清空文本重新写入
    printf("%02d:%02d:%02d\n", hours, minutes, seconds);
    fclose(stdout);
}

void timekeeper(int totalTimes)
{
    int hours, minutes, seconds;
    while (1)
    {
        system("cls");//清屏
        hours = totalTimes / 60 / 60;
        minutes = (totalTimes - hours * 60 * 60) / 60;
        seconds = totalTimes - hours * 60 * 60 - minutes * 60;
        printf("%02d:%02d:%02d\n", hours , minutes, seconds);//打印当前剩余时间
        Sleep(1000);//延时一秒
        totalTimes -= 1;
        if (totalTimes == 0)//计时结束
        {
            break;
        }
    }
    system("cls");
    printf("0:0:0\n");
    mciSendString(_T("play musicTip"), NULL, 0, NULL);//播放计时结束的声音
    printf("计时结束\n");
    Sleep(1000);
    mciSendString(_T("close musicTip"), NULL, 0, NULL);
}

执行结果

获取用户输入
动态的倒计时
结束会“滴”的一声
成功计时完毕才会记录结果

总结

遇到两个问题

freopen("record.txt", "a", stdout); 函数用完之后,就算进行了 fclose(stdout); 如果程序继续运行并试图在控制台输出字符,程序会中断。


int getTime(int &hours, int &minutes, int &seconds)
本来想用指针的,脑子一短路写错了,结果竟然没出错。
函数里 int &hours 这是定义了什么形参,还成功改变了实参的值。
查资料发现 int& 是对整型变量的引用
整型变量的引用定义,例如:
int a;
int &A=a;
引用即是一个变量的别名,例中A是a的一个别名,每一次访问A,对A的一系列操作实际上就是访问a,对a进行操作,此时的A和a在有些编译器中时同一个地址。在定义引用时必须初始化,且必须用有内存地址的对象初始化,初始化之后不可以在指向别的对象。
错误原因是我用了cpp的文件后缀,所以c++的语法是兼容的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 上一篇中的课后练习大家普遍反映太简单了。其实,麻雀虽小,五脏俱全。今天我们来看看它的解法。 1. 题目 请编程实现...
    天花板阅读 1,466评论 2 17
  • 简介 C++98/03的设计目标:一、比C语言更适合系统编程(且与C语言兼容)。二、支持数据抽象。三、支持面向对象...
    认真学计算机阅读 5,276评论 0 53
  • 我们与他们 把生活中突如其来的事情都看做自己应该做的,看成为了我们的事业而忙碌。而非把工作看成他们的、别人该做的事...
    大橙子5996阅读 235评论 0 0
  • 第五章 平等大爱无偏私 天地不仁,以万物为刍狗;「圣人」不仁,以百姓为刍狗。天地之间,其犹橐钥乎。虚而不屈,动而愈...
    爱相续阅读 998评论 0 0