- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以,我们有这个基于上周的家庭作业。我们应该创建单独的数组来保存指向特定工作类型的所有人的指针。这是我到目前为止的代码。我想知道是否有人可以帮助我。谢谢!
#include <stdio.h>
#include <stdlib.h>
#include "Person.h"
#include "data.h"
#define new
char * randomVal(char * arr[], int elements)
{
int value = (int)(rand() % elements);
char * name = arr[value];
return name;
}
int main (int argc, const char * argv[])
{
Person * Population[100];
int i;
for (i = 0; i < 100; i++)
{
Population[i] = new person(randomVal(Names, 10), randomVal(Vehicles, 5), randomVal(Jobs, 5), randomVal(Job_Pace, 3), randomVal(Education, 4), randomVal(Work_Ethic, 3), randomVal(Sleep_Habits, 3));
Population[i]->print(Population[i]);
}
for (i=0; i<100; i++) {
destroy(Population[i]);
}
//Person * p1 = new person(randomName(), "Camero", "Lawyer", "Fast", "Doctorate", "Poor", "Poor");
//p1->print(p1);
return 0;
}
/*
* Person.h
* Person2
*
* Created by Tracie Marshall on 10/15/09.
* Copyright 2009 Me. All rights reserved.
*
*/
typedef struct
{
//data
//dynamic sized vars
char * name;
char * vehicle;
char * job;
char * job_pace;
char * education;
char * work_ethic;
char * sleep_habits;
//static-sized vars
double bank_account;
int leadership;
int IQ;
int aggro;
int outfit;
int alertness;
//methods
void (*print)(void *);
} Person;
Person * person(char * n, char * v, char * j, char * jp, char * ed, char * w, char * s);
void printPerson(Person* p);
void destroy(Person * p);
/*
* Person.c
* Person2
*
* Created by Tracie Marshall on 10/15/09.
* Copyright 2009 Me. All rights reserved.
*
*/
#include <string.h>
#include <stdlib.h>
#include "Person.h"
#include <stdio.h>
char * newString(char * dest, char * source)
{
dest = (char *)malloc((strlen(source) + 1) * sizeof(char));
strcpy(dest, source);
return dest;
}
void printPerson(Person* p)
{
printf("\n%s:\n\tvehicle:\t%s\n\tjob:\t\t%s\n\tjob pace:\t%s\n\teducation:\t%s\n\twork ethic:\t%s\n\tsleep habit:\t%s", p->name, p->vehicle, p->job, p->job_pace, p->education, p->work_ethic, p->sleep_habits);//, p->age, p->job, p->spouse);
}
Person * person(char * n, char * v, char * j, char * jp, char * ed, char * w, char * s)
{
//allocate self
Person * p = (Person *) malloc(sizeof(Person));
//allocate dynamic variables on stack
p->name = newString(p->name, n);
p->vehicle = newString(p->vehicle, v);
p->job = newString(p->job, j);
p->job_pace = newString(p->job_pace, jp);
p->education = newString(p->education, ed);
p->work_ethic = newString(p->work_ethic, w);
p->sleep_habits = newString(p->sleep_habits, s);
//initalize static-size variables
p->bank_account; // = ba;
p->IQ;
p->aggro;
p->outfit;
p->alertness;
//initialize function pointers
p->print = &printPerson;
return p;
}
void destroy(Person * p)
{
free(p->name);
free(p->vehicle);
free(p->job);
free(p->job_pace);
free(p->education);
free(p->work_ethic);
free(p->sleep_habits);
free(p);
}
/*
* data.h
* Person2
*
* Created by Tracie Marshall on 10/15/09.
* Copyright 2009 Me. All rights reserved.
*
*/
char * Names[10] = {"Lisa", "Pamela", "Amanda", "Gerard", "Dan", "Patrick", "Peter", "Michael", "Sally", "Tracie"};
char * Vehicles[5] = {"Feet", " Old Bike","New Bike", "Cheap Car", "Expensive Car"};
char * Jobs[5] = {"Unemployed", "Burger World", "Junior Programmer", "Senior Programmer", "Academia"};
char * Job_Pace[3] = {"Easy Going", "9-5 Grind", "Whirl Wind"};
char * Education[4] = {"Bum", "High School", "College", "Graduate School"};
char * Work_Ethic[3] = {"Drifter", "Hard Worker", "Workaholic"};
char * Sleep_Habits[3] = {"Good", "Medium", "Poor"};
最佳答案
我不确定你的问题是什么,但我会在你更新问题时尝试更新我的答案。
需要注意的一件事是您正在使用 C++(或 C99)风格的注释(//comment here
)。如果您使用严格的 ANSI C90 支持进行编译,那么这将失败。另外,不要转换 malloc
的返回值(这源于一个非常古老的问题,在 C90 及更高版本的编译器中不存在)。
另外,这不是 ANSI C。你有这一行:
Population[i] = new person(randomVal(Names, 10), ... /* snipped for brevity */
ANSI C 中没有“new”关键字。这甚至不是 C++ 的正确语法(乍看之下,您似乎可以删除 new
和person()
函数返回正确的东西)。
编辑
好的,这是对评论的回应。您可以通过很多方法来做到这一点。一种简单的方法是为可以从事特定工作的人数设置限制。然后,您可以创建一个与 Jobs 数组大小相同的数组,并且这个新数组中的每个索引(例如 HasJob)都可以与 Jobs 数组中的索引相匹配。因此,HasJob[0] 可以存储每个拥有“Unemployed”工作的 Person。您可以为每个 HasJob 条目保留一个单独的计数,这样当您插入时,您知道将新的 Person 对象粘贴到哪里,或者您可以将所有值初始化为 NULL,然后每次插入时,进行线性搜索。
所以你可以:
/* 5 is the number of possible Jobs and 100 is the max persons per job */
Person *HasJob[5][100];
memset(HasJob, 0, 5*100*sizeof(Person *));
现在,您可以通过执行以下操作将每个 Person 插入到 HasJob 数组中
int i, j, k;
for(i=0; i < 5; i++)
{
for(j=0; j < 100; j++)
{
if(strcmp(Population[j]->job, Jobs[i]) == 0)
{
k = 0;
while(((p = HasJob[i][k]) != NULL) && (k < 100) k++;
if(k != 100) /* if k == 100, somehow too many persons have this job */
{
HasJob[i][k] = Population[j];
}
}
}
}
所以,我还没有尝试编译它,可能会有一些问题,但这是这种方式的一般过程。从本质上讲,您要检查每份工作,然后针对每份工作检查每个人;如果那个人在那个工作中,在 HasJob 中找到一个空位并将那个人放在那里。
同样,有很多方法可以做到这一点。您可以为每个作业保留一个计数,然后您就不必进行线性扫描,但这种方法使您不必跟踪和实例化这些变量。另一种方法是使用链表。这可能会给你一个想法。当然,您应该为每个常量值使用 #define
(最大值,例如 5 和 100 可以是 MAX_JOBS
、MAX_PERSONS
等)。
关于c - ANSI C : Creating an Array of Jobs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581041/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!