- 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/
我有一个简单的 pyparsing 构造,用于提取日志消息的部分内容。看起来像这样 log_line = 时间戳 + task_info + Suppress(LineEnd()) 此结构可以很好地解
我想定义一个函数 scaryDict(),它接受一个参数(textfile)并返回 textfile 中的单词按字母顺序排列,基本上生成字典但不打印任何一个或两个字母的单词。 这是我目前所拥有的……不
我正在尝试弄清楚如何包含对外部数据文件(文本形式)的引用,我希望通过 Web Start (JNLP) 与我的应用程序一起分发该文件。筛选 JNLP 结构的文档,我发现您可以包含对 JAR、nativ
我尝试将 Java 程序从 Eclipse 导出到 .jar 文件,但遇到了问题。它运行良好,但由于某种原因它没有找到它应该从中获取数据的文本文件。如果有人能帮忙解决这个问题,我将非常感激。 最佳答案
在过去的 20 个小时里,我试图解决以下问题,所以在开始考虑跳出窗外之前我想,我最好在这里寻求帮助: I have a text file with following content: ID 1 T
今天我试图删除一个简单文本文件中的重复行,例如: input (list.txt): hello hello try output (list.txt): try 我尝试使用 Notepad++ 删除
我将一个文本文件添加到我的项目中,如下路径所示: Myproject/WebPages/stopwords.txt 图片: http://s7.postimg.org/w65vc3lx7/Untitl
所以我在我的程序上工作,现在我无法找到解决方案。我需要在 fext 文件中替换更多的符号,目前程序只将“TIT”替换为代码“*245$a”,如果我想用同样的方式替换其他字母,程序不会改变。有人知道如何
这是一个非常简单的问题,但无论我看哪里,我都会得到不同的答案(这是因为它在 c++0x 中已经改变还是将要改变?): 在 C++ 中,我如何从一个文本文件中读取两个数字并将它们输出到另一个文本文件中?
我有一个 C++ 项目应该添加 到每一行的开头和到每一行的末尾。这适用于普通英文文本,但我有一个中文文本文件,我想这样做,但它不起作用。我通常使用 .txt 文件,但为此我必须使用 .rtf 来保存中
所以我的驱动看起来像这样: #include "problem2.h" #include "problem1.h" #include "problem3.h" #include #include
我有一个包含字符串标识符的 ascii 数字文本文件(>50k 行),可以将其视为数据 vector 的集合。根据用户输入,应用程序在运行时只需要这些数据 vector 之一。 据我所知,我有 3 个
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Any decent text diff/merge engine for .NET ? 我有两个文本文件,
我正在尝试将对话选择器中的唤醒时间和 sleep 时间记录到这样的文本文件中,但是对方法 commitToFile2 的调用不会 append 文本文件“savedData.txt”。 我知道这段代码
我开发了一个 android webview 并尝试在单击 webview 中的链接时下载生成的数据:文本文件。 webView.setDownloadListener(new Downloa
我在一个文本文件中有 250 张图像/天 4000*3000 像素。 file '/home/user/camdata/nonseqdata.jpg' file '/home/user/camdata
我曾多次尝试将此配置文件转换为多维数组,这意味着我必须读取 config.txt 文件,然后必须将其转换为多维数组。我需要帮助或一些建议。 配置文件: id=www session.timeout=1
我正在尝试使用 sublime text 3 打开文件,我想用光标在具体行号处打开它。 我一直在查subl --help但我找不到混凝土线的选择。因此我只是使用:subl filename 有没有办法
我想在我的应用程序中快速显示一个大文本文件的内容,而不是将整个文件加载到内存中。 其他人是怎么做的? Total Commander是一个很棒的工具,它有一个很棒的内部查看器可以做到这一点。无论文件有
我是一名优秀的程序员,十分优秀!