- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在过去的 2 天里,我一直在努力思考这个问题,但仍然不知道该怎么做。几乎我必须创建一个函数(getRawData),它传递一个指向已打开以供读取的文件的指针,并传递一个结构数组和该数组中当前的记录数(通过参数当前大小)。函数是将文件中的数据读入数组,放在数组末尾,读取后返回文件中的记录总数。我的问题是我真的不知道如何读取文件并将数据存储到数组结构中,我一直在尝试读取文件/记录,但我仍然不知道该怎么做。有问题的函数是 getRawData
整个程序实际上有两个文件而不是一个(malebabynames.csv 和 femalebabynames.csv),程序的重点是让程序向用户询问他们的名字,然后检查文件记录以查看这个名字有多受欢迎。由于某些男孩名字和女孩名字可以互换,因此需要为用户输入的每个名字读取这两个文件。这是我到目前为止的代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
struct nameRecord {
char name[31];
int year;
int frequency;
};
struct nameRecord;
void allCaps(char[]);
int getRawData(FILE*, struct nameRecord[], int);
void setYearTotals(struct nameRecord[], int, int);
void setNameYearTotals(char, struct nameRecord[], int, int);
void getPerHundredThousand(int, int, double);
void printData(double);
void graphPerHundredThousand(double);
int main(void)
{
int currSizem = 0;
int currSizef = 0;
struct nameRecord records[currSizem];
FILE* fp = NULL;
FILE* fp2 = NULL;
char name[31];
printf("Please enter your name: ");
scanf("%30[^\n]", name);
printf("your name is %s\n", name);
//opening both male and female name files and reading them in order to get the total number of records in the array
fp = fopen("malebabynames.csv", "r");
if (fp != NULL) {
printf("file opened\n");
while(3 == fscanf(fp, "%[^,],%d,%d", records[currSizem].name, records[currSizem].year, records[currSizem].frequency)) {
currSizem++;
}
} else {
printf("file failed to open\n");
}
fp2 = fopen("femalebabynames.csv", "r");
if (fp != NULL) {
printf("file opened\n");
while(3 == fscanf(fp2, "%[^,],%d,%d", records[currSizef].name, &records[currSizef].year, &records[currSizef].frequency)) {
currSizef++;
}
} else {
printf("file failed to open\n");
}
return 0;
}
//function that automatically capitalizes the users inputted name
void allCaps(char s[]) {
while(*s != '\0') {
*s = toupper((unsigned char) *s);
s++;
}
}
//function that reads and places the read files into the struct arrays
int getRawData(FILE* fp, struct nameRecord records[], int currSize) {
for(i = 0; i < currSize; i++) {
fscanf(fp, "%[^,],%d,%d", records[i].name, &records[i].year, &records[i].frequency);
}
}
根据网站的具体说明:
Your program will ask the user to enter a name (you may assume that the name will be no more than 30 characters long). It will then find the popularity of the name between 1921 and 2010 and print out a chart and graph. The program will then ask the user if they wish to do another analysis and repeat the process.
该程序将从以下数据源中提取信息 确定名称的受欢迎程度。
ontario female baby names
ontario male baby names请注意,有些名字同时被认为是男性和女性,因此您 无论名称如何,程序都需要来自两个文件的数据 进入。
由于出生人数随时间发生变化 (你预计 1945 年的出生人数比 1920),你不能简单地使用原始数字来确定 知名度。假设有 100 人出生,其中 50 人出生 1920 年命名为“迈克尔”与 1000 次出生,其中 55 名婴儿命名 1950 年的迈克尔。在这种情况下,“迈克尔”的流行实际上是 1920 年高于 1950 年。
数据集是从 1917 年到 2010 年收集的。您的程序将 确定一个名字在每十万个出生中出现的次数 从 1921 年开始每隔 5 年(您可以忽略数据 1921 年之前)。因此,如果用户输入“Allison”,您将确定 1921年到1925年、1926-1930年、1931-1935年“艾莉森”的流行度, ..., 1996-2010 (从1921年到现在共有18个五年期 和 2010 年)。您可以假设不超过 150,000 条记录 两个文件的总和。
在每种情况下,总人口是区域内所有出生人口的总和 男性和女性的年份范围。有你名字的号码 感兴趣的是在 年份范围。您的程序会将数据显示为一个值 (每十万新生儿中有这个名字的婴儿数量)和 该数据的图表。
最佳答案
您现在走在正确的轨道上,可以将文件中的每一行读入一条记录中。对于为记录数组分配内存,如果您知道(比如说)每个文件中的名称不超过 1000 个,最简单的偷懒方法就是声明 struct nameRecord records[1000]
。
但是如果您被明确指示记录的数量没有限制,并且程序需要在运行时弄清楚这一点,您将需要动态分配数组:
struct nameRecord *records;
...
/* after counting currSizem lines in the file */
records = malloc(currSizem * sizeof(struct nameRecord));
现在您可以重新读取该文件,知道其中的记录数量与您需要的数量完全相同。
当您不再需要records
数据时,确保调用free()
以返回您分配的内存:
free(records);
需要考虑的事项:您需要区别对待女性和男性婴儿的名字吗?或者只是衡量他们在所有婴儿中的受欢迎程度?如果需要单独检查它们,那么您将需要保留两个数组,每个文件一个。但是如果重点是将两个文件读取到一个数据结构中,那么您将需要:
关于C:将文本文件读入结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459531/
假设您有 2 个文件,如下所示。 file_1_october.csv file_2_november.csv 文件具有相同的列。所以我想在 R 中读取这两个文件,我可以使用 map 轻松完成。我还想
我有一个制表符分隔的文本文件: 0730000 John 1 01 225 000 000 当我将它读入 R 时 stud_stats data.table::f
似乎最直观的是 .rdata 文件可能是 R 加载的快速文件格式,但是在扫描一些堆栈帖子时,似乎更多的注意力集中在提高 .csv 或其他格式的加载时间上。有确定的答案吗? 最佳答案 不是一个明确的答案
我是 R 的新手,目前在读取 .csv 文件并将其转换为 data.frame 时遇到了很多麻烦7 列。这是我正在做的: gene_symbols_table head(gene_symbols_t
基本上我有一个格式如下所示的 csv: csv 有 11 列,前五列和后五列完全相同。我希望能够读取 csv 并将第一列和第五列(期间和支出)的所有实例存储在一个列表中,它们具有值,并对另一个列表中的
我对 Julia 比较陌生,正在寻找一种有效的方法来从文本文件中读取并将每个“列”存储在数组中(我有 2 列,但通用解决方案也很棒)。例如,我想要输入 1 2 3 4 5 6
基本上我有一个格式如下所示的 csv: csv 有 11 列,前五列和后五列完全相同。我希望能够读取 csv 并将第一列和第五列(期间和支出)的所有实例存储在一个列表中,它们具有值,并对另一个列表中的
我的程序分配了一个 32 位 int,随后尝试使用 read(2) 从套接字将 4 个字节读入 int 有时读取不完整并返回读取 2 个字节。有什么方法可以从中恢复吗?我想我必须在 int 的中途生成
我有大量的 CSV 文件。有些标题从第一行开始,其他标题从第 3 行开始,其他的从第 7 行开始,依此类推。 标题看起来都一样,它们只是从不同文件的不同行开始。有没有办法有条件地 read.csv 文
我写了一个小程序来从 csv 文件中读取数据: using System; using System.Collections.Generic; using System.Linq; using Sys
我需要读入一个包含 10,000 个整数的列表,并将它们按升序放置在一个 vector 中。请注意,我不是在然后阅读排序,而是在同时阅读时排序。 我这样做是为了学习。我意识到阅读时排序是 O(n^2)
我有一个问题。不幸的是,我没有找到任何答案。如何将参数传递给脚本,这是另一个命令的结果。例如: ls | ./myscript.sh 我想将 ls 的结果传递给 myscript。如果我执行上面的命
我在读取扩展 ASCII 字符并将其转换为十进制值时遇到问题。我试过这样做: unsigned char temp; while(temp = cin.get != EOF) { cout << (i
我已经通过以下命令加载了文本文件。我想从 contents 中删除由 \n 分隔的第一行标题行。怎么做? txtfile = open(filepath, "rt") contents = txtfi
希望一切顺利...我正在将数据集输入到 sklearn 算法中进行分类,但找不到任何简单的数据集来开始,所以我自己制作了数据集。但有一个问题... import numpy as np import
我有一个 .csv 文件,它有 3 行和 5 列,值为 0、1、2、3、50 或 100。我将它从 Excel 工作表保存到 .csv 文件。我正在尝试使用 C++ 读取 .csv 文件,并根据最后三
我有一个 HTML 文件,它将作为我要发送的电子邮件的模板。 html 中有一些字段是可变的。我想知道是否有一种可靠的方法可以用变量替换 HTML 文件中的占位符。我知道我可以 string.Repl
我从未使用过 JSON 文件,但我有实现 JSON 文件的任务,我需要将其转换为 IEnumerable。当我尝试对 JSON 对象进行反序列化时,我得到一个异常,上面写着: An unhandled
我正在尝试阅读 IFormFile从这样的 HTTP POST 请求中收到: public async Task UploadDocument([FromForm]DataWrapper data)
我有一个包含大量多行文本 block 的文件。我想将该文件读入一个字符向量列表——每个 block 一个。我对 scan()、read.table() 等函数的文档的阅读似乎表明一行的结尾将结束向量。
我是一名优秀的程序员,十分优秀!