- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个文件,我必须从中加载许多轨道,找到长度超过 3:30 的轨道并找到这些轨道的平均 bpm。
这是我的代码。
主文件:
#include <stdio.h>
#include "functions.h"
int main(void)
{
Playlist *all, *long_tracks;
float avg_bpm;
all = load_tracks("tracks.txt");
long_tracks = get_tracks_longer_than(3,30,all);
print_playlist(long_tracks);
avg_bpm = get_avg_bpm(long_tracks);
printf("Average BPM of the playlist is: %.2f\n", avg_bpm);
return 0;
}
标题:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
typedef struct track {
char track[250];
float bpm;
int mm, ss;
} Track;
typedef struct playlist {
int count;
Track **tracks;
} Playlist;
void print_playlist(Playlist *list);
Playlist* load_tracks(char *filename);
Playlist* get_tracks_longer_than(int mm, int ss, Playlist* all);
float get_avg_bpm(Playlist *list);
#endif
功能:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "functions.h"
void print_playlist(Playlist *list) {
int i;
for (i = 0; i < list->count; i++) {
printf("%s (%d:%d) [%f]\n", list->tracks[i]->track, list->tracks[i]->mm, list->tracks[i]->ss, list->tracks[i]->bpm);
}
}
Playlist* load_tracks(char *filename) {
int n,i;
Playlist *list = (Playlist*) malloc(sizeof(Playlist));
Track *tracks;
FILE *f = fopen(filename, "r");
fscanf(f, "%d", &n);
printf("Tracks: %d\n", n);
tracks = (Track*) malloc(n*sizeof(Track));
list->tracks = (Track**) malloc(n*sizeof(Track*));
for (i = 0; i < n; i++) {
fscanf(f, "%d:%d", &tracks[i].mm, &tracks[i].ss);
fscanf(f, "%f", &tracks[i].bpm);
fgetc(f);
fgets(tracks[i].track, 250, f);
tracks[i].track[strlen(tracks[i].track)-1] = '\0';
list->tracks[i] = &tracks[i];
}
list->count = n;
return list;
}
Playlist* get_tracks_longer_than(int mm, int ss, Playlist* all) {
Playlist *longSongs = (Playlist*) malloc(sizeof(Playlist));
Track *tracks;
tracks = (Track*) malloc(all->count*sizeof(Track));
longSongs->tracks = (Track**) malloc(all->count*sizeof(Track*));
int i, n = 0;
for(i=0;i<all->count;i++)
{
if(all->tracks[i]->mm>mm)
{
n++;
memcpy ( &longSongs, &all, sizeof(all) ); //I also tried longSongs[i]=all[i];
}
else if(all->tracks[i]->mm==mm)
{
if(all->tracks[i]->ss>ss)
{
n++;
memcpy ( &longSongs, &all, sizeof(all) );
}
}
}
longSongs->count=n;
return longSongs;
}
float get_avg_bpm(Playlist *list) {
float avg_bpm=0;
int i;
for(i=0;i<list->count;i++)
{
avg_bpm+=list->tracks[i]->bpm;
}
return avg_bpm/=list->count;
}
问题出在我的 get_tracks_longer_than 函数中,我真的不知道如何将我想要的结构成员从源结构复制到目标结构,我只能设法将所有成员从一个结构复制到另一个结构。我的 n 计数器正确计算轨道数量,并且计算 bpm 的函数似乎可以工作,但我不知道如何获得我想要的确切数据。我尝试使用 memcpy 函数,尝试像这样分配它:longSongs[i]=all[i]
,并且我尝试手动分配值,例如:
longSongs->tracks[i]->mm = all->tracks[i]->mm;
longSongs->tracks[i]->ss = all->tracks[i]->ss;
longSongs->tracks[i]->bpm = all->tracks[i]->bpm;
但没有任何作用,它总是复制源结构的所有成员,忽略我的 if 语句。
最佳答案
您不需要复制成员,只需复制指针即可。
longSongs->tracks[n] = all->tracks[i];
请注意,longSongs->tracks
的索引是 n
,而不是 i
。否则,您将在 longSongs->tracks
数组中为所有未选择的歌曲留下空白。
Playlist* get_tracks_longer_than(int mm, int ss, Playlist* all) {
int min_secs = mm*60 + ss;
Playlist *longSongs = malloc(sizeof(Playlist));
longSongs->tracks = malloc(all->count*sizeof(Track*));
int i, n = 0;
for(i=0;i<all->count;i++)
{
if(all->tracks[i]->mm*60 + all->tracks[i]->ss > min_secs)
{
longSongs->tracks[n++] = all->tracks[i];
}
}
longSongs->count=n;
return longSongs;
}
其他更改:我删除了未使用的 tracks
变量,并通过将分钟和秒合并为总秒数来简化运行时间的比较。
关于将特定结构成员复制到另一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38134865/
我目前正在尝试基于哈希表构建字典。逻辑是:有一个名为 HashTable 的结构,其中包含以下内容: HashFunc HashFunc; PrintFunc PrintEntry; CompareF
如果我有一个指向结构/对象的指针,并且该结构/对象包含另外两个指向其他对象的指针,并且我想删除“包含这两个指针的对象而不破坏它所持有的指针”——我该怎么做这样做吗? 指向对象 A 的指针(包含指向对象
像这样的代码 package main import "fmt" type Hello struct { ID int Raw string } type World []*Hell
我有一个采用以下格式的 CSV: Module, Topic, Sub-topic 它需要能够导入到具有以下格式的 MySQL 数据库中: CREATE TABLE `modules` ( `id
通常我使用类似的东西 copy((uint8_t*)&POD, (uint8_t*)(&POD + 1 ), back_inserter(rawData)); copy((uint8_t*)&PODV
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我有一个指向结构的指针数组,我正在尝试使用它们进行 while 循环。我对如何准确初始化它并不完全有信心,但我一直这样做: Entry *newEntry = malloc(sizeof(Entry)
我正在学习 C,我的问题可能很愚蠢,但我很困惑。在这样的函数中: int afunction(somevariables) { if (someconditions)
我现在正在做一项编程作业,我并没有真正完全掌握链接,因为我们还没有涉及它。但是我觉得我需要它来做我想做的事情,因为数组还不够 我创建了一个结构,如下 struct node { float coef;
给定以下代码片段: #include #include #define MAX_SIZE 15 typedef struct{ int touchdowns; int intercepti
struct contact list[3]; int checknullarray() { for(int x=0;x<10;x++) { if(strlen(con
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Empty “for” loop in Facebook ajax what does AJAX call
我刚刚在反射器中浏览了一个文件,并在结构构造函数中看到了这个: this = new Binder.SyntaxNodeOrToken(); 我以前从未见过该术语。有人能解释一下这个赋值在 C# 中的
我经常使用字符串常量,例如: DICT_KEY1 = 'DICT_KEY1' DICT_KEY2 = 'DICT_KEY2' ... 很多时候我不介意实际的文字是什么,只要它们是独一无二的并且对人类读
我是 C 的新手,我不明白为什么下面的代码不起作用: typedef struct{ uint8_t a; uint8_t* b; } test_struct; test_struct
您能否制作一个行为类似于内置类之一的结构,您可以在其中直接分配值而无需调用属性? 前任: RoundedDouble count; count = 5; 而不是使用 RoundedDouble cou
这是我的代码: #include typedef struct { const char *description; float value; int age; } swag
在创建嵌套列表时,我认为 R 具有对列表元素有用的命名结构。我有一个列表列表,并希望应用包含在任何列表中的每个向量的函数。 lapply这样做但随后剥离了列表的命名结构。我该怎么办 lapply嵌套列
我正在做一个用于学习目的的个人组织者,我从来没有使用过 XML,所以我不确定我的解决方案是否是最好的。这是我附带的 XML 文件的基本结构:
我是新来的 nosql概念,所以当我开始学习时 PouchDB ,我找到了这个转换表。我的困惑是,如何PouchDB如果可以说我有多个表,是否意味着我需要创建多个数据库?因为根据我在 pouchdb
我是一名优秀的程序员,十分优秀!