我正在尝试创建一个程序,要求用户输入一个名称(假设每个名称的长度不超过30个字符)。然后它会在1921年到2010年之间找到该名称的受欢迎程度,并打印出图表和图表。然后程序将询问用户是否希望进行另一次分析并重复该过程。
这个程序需要使用大约7个不同的函数,但是我无法理解我需要使用的2个函数。
功能1:
int getRawData(FILE* fp,struct NameRecord records[],int currSize);`
函数传递指向已经打开的文件的指针 读。该文件中的每一行都是表格(名称是 完全大写在文件中):
年,NAME,频率
该函数还传递了一个NameRecord结构数组(记录) 和当前在该数组中的记录数(currSize)。这个 函数会将文件中的数据读入放置的数组中 数组的结尾(文件中的第一个记录将被放入 阵列[currSize])。函数将返回的记录总数 读完文件后的数组。
struct NameRecord{
char name[31];
int year;
int frequency;
}
现在我不确定这是否意味着我需要在从文件中接收记录的函数中创建一个新数组,或者它是否完全是其他东西而且我没有正确阅读说明。(文件在这个案子是malebabynames.csv)
第二功能:
void setYearTotals(struct NameRecord records[], int size, int yearRangeTotal[]);
函数传递一个NameRecords(记录)数组和大小 那个数组(大小)。它还传递了一个名为yearRangeTotal的数组 这将用于存储给定年份的总人口 范围。
yearRangeTotal[0] holds the total population between 1921 to 1925 yearRangeTotal[1] holds the total population between 1926 to 1930 yearRangeTotal[2] holds the total population between 1931 to 1935 ... yearRangeTotal[17] holds the total population between 2006 to 2010
答案 0 :(得分:1)
(1)不,只需填写传递的数组即可。这与传递fread
一个char(或其他任何)数组并要求它读取N个项目没有什么不同。检查返回代码以了解实际读取的数量。
(2)不太清楚。我猜你会被要求迭代NameRecord数组并根据NameRecord.year中的“year”字段增加相应的yearRangeTotal元素。