c语言如何随机获取1kb,基于VS2010+C语言实现播放器的顺序播放、随机播放

1.[文件] music.h ~ 920B     下载(38)

/*

* File: music.h

* Time: 2014/10/11

*/

#ifndef __MUSIC_H__

#define __MUSIC_H__

typedef enum { UNPLAYED, PLAYED } BOOL; // 自定义一个bool类型

typedef enum { ORDER, RANDOM } PLAY_MODEL; // 自定义一个播放类型

typedef char *MUSIC_NAME; // 歌曲名

typedef MUSIC_NAME *MUSIC_NAME_TAB; // 歌曲名表

#define MUSIC_NAME_SIZE 60

typedef struct _music_ {

char str[MUSIC_NAME_SIZE];

BOOL isPlayed; // 是否被播放过

} MUSIC; // 歌曲 MUSIC == struct _music_

typedef MUSIC *MUSIC_TAB; // 歌曲播放列表 MUSIC_TAB == MUSIC *

void systemInit(void); // 系统初始化,必须在listPlay()之前调用,且只能调用一次

void play(const MUSIC_NAME_TAB musNametab, const int musnum, const PLAY_MODEL playModel);

// 按照歌曲名表musNametab播放歌曲;musnum为歌曲数量;playModel为播放模式;

// playModel:ORDER(按歌曲名称顺序播放) RANDOM(随机播放)

#endif

/*

* End of file

*/

2.[文件] music.c ~ 4KB     下载(33)

/*

* File: music.c

* Time: 2014/10/11

*/

#include "music.h"

#include

#include

#include

#include

#include

static MUSIC_TAB newtab = NULL; // 全局变量,一张经过处理(排序/洗牌)的新的歌曲表单

static void playOneMusic(MUSIC mus); // 播放歌曲mus

static MUSIC_TAB orderList(const MUSIC_TAB oldtab, const int musnum); // 获得新的有序列表

static MUSIC_TAB randomLis(const MUSIC_TAB oldtab, const int musnum); // 获得新的随机列表

static void listPlay(const MUSIC_TAB mustab, int musnum, const PLAY_MODEL playModel); // 按照新表单播放

//==========================================================================================================

// 系统初始化,必须在listPlay()之前调用,且只能调用一次

void systemInit(void) {

srand((unsigned int)time(NULL));

}

// 按照歌曲名表musNametab播放歌曲

void play(const MUSIC_NAME_TAB musNametab, const int musnum, const PLAY_MODEL playModel) {

int i;

newtab = (MUSIC_TAB)malloc(sizeof(MUSIC) * musnum);

if (newtab != NULL) {

for (i = 0; i < musnum; i++) { // 装载歌曲名信息,并清零已播放标志

memset(&(newtab[i].str[0]), 0, sizeof(char)*MUSIC_NAME_SIZE);

strcpy(newtab[i].str, musNametab[i]);

newtab[i].isPlayed = UNPLAYED;

}

listPlay(newtab, musnum, playModel);

} else {

fprintf(stderr,"\n Program Running Wrong!\n");

return;

}

}

//==========================================================================================================

static void listPlay(const MUSIC_TAB mustab, int musnum, const PLAY_MODEL playModel) { // 按照新表单播放

//以下注释部分是最初的错误代码

//if (playModel == ORDER) {

//newtab = orderList(mustab, musnum); // 获得新的有序列表

//} else {

//newtab = randomLis(mustab, musnum); // 获得新的随机列表

//}

//while(--musnum >= 0) {

//playOneMusic(*newtab++);// 播放某一歌曲

//}

//free(newtab);

//以下部分是调试之后改正的代码 ========================================

MUSIC_TAB tmp = NULL;

if (playModel == ORDER) {

newtab = orderList(mustab, musnum); // 获得新的有序列表

} else {

newtab = randomLis(mustab, musnum); // 获得新的随机列表

}

tmp = newtab;

while(--musnum >= 0) {

playOneMusic(*tmp++);// 播放某一歌曲

}

if (newtab != NULL) {

free(newtab);

}

}

static void playOneMusic(MUSIC mus) {

if (mus.isPlayed == UNPLAYED) { // 如果歌曲mus在当前循环尚未播放过

if (mus.str != NULL) {

if (strlen(mus.str) <= 0) { // 歌曲名为空字符串

fprintf(stderr,"\n The file of the song \"%s\" is empty !!!\n");

} else {

printf("\n Start playing the song: "); // 模拟歌曲播放

puts(mus.str);

printf(" ");

putchar('.'); Sleep(500); putchar('.'); Sleep(500); putchar('.');

printf("\n Stop playing the song.\n ");

Sleep(500);

}

} else { // 歌曲名为空

fprintf(stderr,"\n Unfound the song \"%s\" !!!\n", mus.str);

}

}

mus.isPlayed = PLAYED;

}

static MUSIC_TAB orderList(const MUSIC_TAB oldtab, const int musnum) { // 获得新的有序列表

if (newtab != NULL) { // newtab为全局变量

int i,j;

MUSIC temp;

memcpy(newtab, oldtab, sizeof(MUSIC)*musnum);

// 将newtab[0]~newtab[musnum-1]排序

for (i = 0; i < musnum-1; i++) {

for (j = i+1; j < musnum; j++) {

if (strcmp(newtab[i].str, newtab[j].str) > 0) { // newtab[i]->str > newtab[j]->str

temp = newtab[i];

newtab[i] = newtab[j];

newtab[j] = temp;

}

}

}

return newtab;

} // @ if (newtab != NULL)

// 如果newtab==NULL则不作任何处理,统一由listPlay()处理

}

static int myRand(int len) { //生成一个[0,len-1]之间的随机数

int iRand;

iRand = rand()%len; // 这就是为什么需要systemInit()的原因

return iRand;

}

#define SWAP(a,b,_t) do { _t t = a; a = b; b = t; } while(0)

static void shuffle(const MUSIC_TAB table, const int musnum) { // 洗牌

int n;

// 将table[0]~table[musnum-1]洗牌

// 具体算法:http://bbs.bccn.net/thread-331122-1-1.html

for (n = musnum; n > 1; --n) {

int i = myRand(n);

SWAP(table[n-1], table[i], MUSIC);

}

}

static MUSIC_TAB randomLis(const MUSIC_TAB oldtab, const int musnum) { // 获得新的随机列表

if (newtab != NULL) { // newtab为全局变量

memcpy(newtab, oldtab, sizeof(MUSIC)*musnum);

shuffle(newtab, musnum);

return newtab;

} // @ if (newtab != NULL)

// 如果newtab==NULL则不作任何处理,统一由listPlay()处理

}

/*

* End of file

*/

3.[文件] playmusic.c ~ 1KB     下载(30)

/*

* File: playmusic.c

* Time: 2014/10/11

*/

#include "music.h"

#include

// �˳��򽻲�ʵ��5��������Ÿ�����4��˳�򲥷Ÿ���

// �˸������ԣ�http://music.baidu.com/explore/������Ӣ�ĸ���?fm=altg8

#define SONGS_LEN 6

char *Songs[SONGS_LEN] = {

// strlen(������) <= MUSIC_NAME_SIZE ��@ music.h��

// �Ҹ�������= NULL

"Moves Like Jagger",

"Love Story",

"Unforgivable Sinner",

"Bad Romance",

"Father And Son",

"Wonderful",

};

int main(void) {

systemInit();

puts("\n Initialize system....");

puts("\n ==== ORDER ==== ");

play(Songs, SONGS_LEN, ORDER);

puts("\n ==== RANDOM ==== ");

play(Songs, SONGS_LEN, RANDOM);

puts("\n ==== ORDER ==== ");

play(Songs, SONGS_LEN, ORDER);

puts("\n ==== RANDOM ==== ");

play(Songs, SONGS_LEN, RANDOM);

puts("\n ==== ORDER ==== ");

play(Songs, SONGS_LEN, ORDER);

puts("\n ==== RANDOM ==== ");

play(Songs, SONGS_LEN, RANDOM);

puts("\n Exit system....\n");

return 0;

}

/*

* End of file

*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rmi远程代码执行漏洞_fastjson远程代码执行漏洞复现

漏洞原理fastjson提供了autotype功能&#xff0c;在请求过程中&#xff0c;我们可以在请求包中通过修改type的值&#xff0c;来反序列化为指定的类型&#xff0c;而fastjson在反序列化过程中会设置和获取类中的属性&#xff0c;如果类中存在恶意方法&#xff0c;就会导致代码执…

c语言编简单博弈小游戏,[2018年最新整理]实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏.doc...

[2018年最新整理]实验二&#xff1a;利用α-β搜索过程的博弈树搜索算法编写一字棋游戏实验二&#xff1a;利用α-β搜索过程的博弈树搜索算法编写一字棋游戏一、实验目的与要求(1)了解极大极小算法的原理和使用方法&#xff0c;并学会用α-β剪枝来提高算法的效率。(2)使用C语…

java中重载 参数顺序_Java方法中的参数太多,第4部分:重载

java中重载 参数顺序期望将过多的参数传递给Java方法的问题之一是&#xff0c;该方法的客户端很难确定它们是否以适当的顺序传递了适当的值。 在以前的文章中&#xff0c;我描述了如何使用自定义类型 &#xff0c; 参数对象和构建器来解决此问题。 解决此问题的另一种方法&…

c语言金箍棒答案,《西游记》阅读测试题(带答案)

《西游记》测试题(后附答案)姓名得分1.《如来佛辨识假猴王》故事中,那只假孙悟空是什么猴子变的&#xff1f;()A&#xff0e;金丝猴 B&#xff0e;石猴 C.六耳猕猴2.金角大王和银角大王原来是()的弟子。A&#xff0e;太上老君 B&#xff0e;孙悟空 C&#xff0e;观音菩萨3.蜘蛛…

五个金念什么_四个“金”字读什么?

展开全部读音为&#xff1a;jīn &#xff0c;是金字的异体字写法&#xff0c;读音和意思与金字完全相同&#xff0c;打不62616964757a686964616fe58685e5aeb931333431353265出来&#xff0c;如下图&#xff1a;金拼音&#xff1a;jīn释义&#xff1a;1.俗称金子。金属元素&am…

Istio的零停机滚动更新

本系列文章的第一部分介绍了如何在Kubernetes集群中实现真正的零停机时间更新。 我们专门解决了将流量从旧实例切换到新实例时出现的请求失败。 本文将展示如何使用Istio群集实现相同的目标。 服务网格技术&#xff08;例如Istio&#xff09;通常与容器编排结合使用。 Istio以…

聚类dbi指数_一种基于DBI-PD聚类算法的异常检测机制

一种基于DBI-PD聚类算法的异常检测机制丁姝郁【期刊名称】《电脑开发与应用》【年(卷),期】2015(000)002【摘要】分析了网络数据维数和检测准确度之间的关系&#xff0c;介绍了常用于入侵检测的聚类分析方法及其优缺点。在此基础上&#xff0c;提出一种以戴维森堡丁指数(DBI)为…

单片机红外通信c语言,基于C语言的计算机与多单片机红外无线串口通信的实现.doc...

基于C语言的计算机与多单片机红外无线串口通信的实现基于C语言的计算机与多单片机红外无线串口通信的实现黄文亮 信息学院 电子信息工程专业指导教师 刘传菊摘要&#xff1a;计算机与一台或多台单片机的通信系统中的数据通讯一般采用的是串行通信方式。串行通信可采用有线与无线…

android 设置资源,Android 资源

Android 资源Android Resources02/01/2018本文内容本文介绍了 Xamarin 中 Android 资源的概念&#xff0c;并介绍了如何使用这些资源。其中介绍了如何使用 Android 应用程序中的资源来支持应用程序本地化和多个设备&#xff0c;包括不同的屏幕大小和密度。This article introdu…

zbrush常用笔刷_ZBrush中常用笔刷综合简介

单击左托盘的笔刷图标&#xff0c;弹出一个笔刷库&#xff0c;其中有许多常用笔刷&#xff0c;这也是许多初学者所头疼的问题&#xff0c;ZBrush的笔刷非常多&#xff0c;而且功能很强大&#xff0c;好多朋友不知道该选择哪一个笔刷进行雕刻。其实&#xff0c;在ZBrush的学习中…

spring java配置_Spring:使基于Java的配置更加优雅

spring java配置大家好&#xff0c;我很久没有写新文章了。 积累了很多资料&#xff0c;需要在不久的将来在我的博客中发布。 但是现在我想谈谈Spring MVC应用程序配置。 确切地说&#xff0c;我想谈谈基于Java的Spring配置。 尽管在3.0版本中引入了基于Spring java的配置&…

android封装oauth2,Android AccountAuthenticator和OAuth2

这肯定是可行的。来自Android AccountManager文档&#xff1a;Many servers support some notion of an authentication token, which canbe used to authenticate a request to the server without sending theusers actual password. (Auth tokens are normally created with…

php redis 队列抢红包_php+redis实现消息队列

消息队列&#xff1a;是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递&#xff1b;如果发送消息时接收者不可用&#xff0c;消息队列会保留消息&#xff0c;直到可以成功地传递它应…

使用Spring Security在Spring Boot中进行缓存

在这篇文章中&#xff0c;我想分享一下O&#xff06;B的一个团队的经验教训。 他们正在使用带有Spring Security的Spring Boot。 默认情况下&#xff0c;Spring Security保护的所有内容都将通过以下HTTP标头发送到浏览器&#xff1a; Cache-Control: no-cache, no-store, max…

wifi定位算法android,WIFI定位算法

网络定位指通过周边wifi列表、基站列表、IP地址等信息确定用户位置的过程。 我们采集的训练数据是每个GPS坐标位置和对应的Wifi和基站列表。 其中每个Wifi和基站有唯一的Mac地址作为ID和信号强度。有三种定位方法&#xff1a;均值法首先估计一个wifi的中心点位置&#xff0c;可…

仿小黄车android定位,小黄车ofo是怎么实现自行车定位功能的?

摩拜单车通过车身携带的GPS而实现单车定位&#xff0c;但是我们知道ofo是没有安装GPS&#xff0c;它又是如何实现单车定位的呢&#xff1f;我居住的地方距离地铁站步行大约15分钟左右&#xff0c;距离最近的商场步行将近30分钟&#xff0c;距离周边的便利店,水果店,饭店等步行1…

python苹果下载软件助手哪个好_Mac上有什么实用的必备软件?

Mac上的一些软件真的超好用&#xff0c;比如...每天依据时间变化的壁纸&#xff0c;看清晨、看夕阳我是 Super叔 ,关注了就是好朋友,这里说明下还是,软件只是工具,初衷是为了方便自己提高效率,别为了去模仿所谓某某软件可以怎么怎么复杂的,用得多么炫酷好用,而去花非常多精力为…

hibernate 刷新_Hibernate事实:了解刷新操作顺序很重要

hibernate 刷新Hibernate将开发人员的思维方式从思考SQL转变为思考对象状态转换。 根据Hibernate Docs&#xff0c;实体可能处于以下状态之一&#xff1a; new / transient&#xff1a;实体不与持久性上下文相关联&#xff0c;因为它是数据库不知道的新创建的对象。 持久性&a…

android变量要不要附空值,android-如何在使用Parcelable时序列化空值

我见过的大多数序列化代码都使用两个标志来指示值的存在/不存在&#xff0c;或者在值前加上一个计数字段(例如&#xff0c;在编写数组时)&#xff0c;如果该值不等于&#xff0c;则计数字段仅设置为零。 根本不存在。检查Android核心类的源代码会发现以下代码(来自Message类)&a…

gprs连接中断记录_请收好!脉搏波血压计连接天天血压APP使用指南

总有那么几个粗心的小伙伴丢失了说明书&#xff0c;在后台追问波哥如何连接“天天血压”&#xff0c;于是给大家安排了这篇使用指南。首先我们来了解下“天天血压”的功能&#xff1a;1.通过蓝牙或GPRS传输&#xff0c;同步记录每次测量结果&#xff1b;2. 血压趋势分析&#x…