无法理解作业。我们在课堂上教的方式与我们实验室教练的任务不同,所以我很困惑。
我们获得了一个程序,我们必须填写一个功能来完成该程序。它包括一个包含4个元素的结构。我们创建的函数是一个接收2个数组的函数,这些数组在已经完成的单独函数中初始化,以及两个数组的长度。他们从输入文件中获取此信息,并且已经扫描到程序中。因此,如果两个电影标题相同,则需要读取该函数。如果是,则返回较高的一个。如果有多组电影相同,则会增加两部较昂贵的电影。
从逻辑上讲,我觉得我有正确的想法,我觉得这应该有效,但当然不是。您比较的电影列表位于两个单独的数组中,因此我应该将一个数组中的标题与另一个数组的标题进行比较,然后遍历数组直到达到该长度。
我的代码:创建的函数是getProfit,并且不能更改任何参数或其余代码。这就是我发现它令人困惑的原因,因为我们不能像我们学到的那样去做。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct {
char title[100];
int runTime;
int idtag;
double salePrice;
} DVD;
double getProfit(DVD* list1, int len1, DVD* list2, int len2) ;
double max(double a, double b);
DVD* get(FILE* ifp, int len);
int main() {
FILE* ifp = fopen("dvd.in", "r");
int numCases, loop;
fscanf(ifp, "%d", &numCases);
// Go through each case.
for (loop=0; loop<numCases; loop++) {
// Read in movies.
int len1,len2;
fscanf(ifp, "%d", &len1);
DVD* myMovies = get(ifp, len1);
fscanf(ifp, "%d", &len2);
DVD* yourMovies = get(ifp, len2);
// Output sale price of all common movies.
printf("%.2f\n", getProfit(myMovies, len1, yourMovies, len2));
// Bookkeeping...
free(myMovies);
free(yourMovies);
}
fclose(ifp);
return 0;
}
// Pre-condition: list1 is an array of length len1, list2 is an array
// of length len2. No title appears in either list more
// than once.
// Post-condition: Returns the sum of the sale prices of the common
// DVDs in both lists. Two DVDs are considered the
// same if their titles are identical.
double getProfit(DVD* list1, int len1, DVD* list2, int len2) {
int i, j;
double sales = 0;
for(i = 0; i < len1; i++){
for(j = 0; j < len2; j++){
if(strcmp(list1[i].title, list2[j].title)){
if(list1[i].salePrice < list2[j].salePrice)
sales += list2[j].salePrice;
else if(list1[i].salePrice > list2[j].salePrice)
sales += list1[i].salePrice;
}
}
}
return sales;
}
// Returns the larger of a and b.
double max(double a, double b) {
if (a > b) return a;
return b;
}
// Reads in len DVDs from ifp and returns those store in a dynamically allocated array.
DVD* get(FILE* ifp, int len) {
DVD* res = malloc(sizeof(DVD)*len);
int i;
for (i=0; i<len; i++)
fscanf(ifp, "%s%d%d%lf", res[i].title, &(res[i].runTime), &(res[i].idtag), &(res[i].salePrice));
return res;
}
输入文件:
2
3
BackToTheFuture 108 1234567 15.99
Gremlins 120 13232423 9.99
IndependenceDay 135 2312412 12.99
2
Gremlins 123 13232425 13.99
MonstersInc 95 44232122 15.99
5
a 100 1234213 14.99
b 101 1245332 7.99
c 102 3431533 12.50
d 103 3431434 19.99
e 104 4314133 16.47
4
f 120 5314443 11111111.38
e 104 5134343 16.48
d 110 3431414 14.99
c 105 1234145 14.50
输出应返回的内容:
13.99
50.97
我的输出是什么:
61.96
55555738.73
我知道我的strcmp线不起作用,我的意思是显而易见的。我最初拥有它strcmp(list[i].title, list2[j].title == 0)
但程序在它开始之前崩溃了。
没有人需要给我一个直接的答案,一些指导会很好。谢谢你的阅读。