- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个程序,根据给定的输入排列名称列表。这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 19 //names no longer than 19 chars
#define MAXPEOPLE 10
struct genderinfo {
char** winning;
char** names;
int** scores;
};
char** allocnames(int num);
int** allocratings(int num, int num2);
void inputdata(int numpeople, struct genderinfo *male, struct genderinfo *female, FILE* fp);
void permute(int permuteset[], int k, int numpeople, struct genderinfo *male, struct genderinfo *female, int *maxLindex);
void swap(int permuteset[],int i, int j);
void compare(int permuteset[], struct genderinfo *male, struct genderinfo *female, int *maxLindex, int numpeople);
///write free functions for struct arrays
int main () {
FILE* fp = fopen("matching.txt", "r");
struct genderinfo male;
struct genderinfo female;
//loop variables
int numdates, i, j, k;
//other variables
int numpeople, maxLindex = 0, difference;
fscanf(fp, "%d", &numdates);
for(i=1; i <= numdates; i++) {
fscanf(fp, "%d", &numpeople);
//printf("%d possible couples\n", numpeople);
//allocate memory for arrays of names
male.names = allocnames(numpeople);
female.names = allocnames(numpeople);
male.winning = allocnames(numpeople);
female.winning = allocnames(numpeople);
//allocate memory for score arrays
male.scores = allocratings(numpeople, numpeople);
female.scores = allocratings(numpeople, numpeople);
int permuteset[numpeople];
//fill permute set with 0-k, these will serve as array indexes to compare against malenames array
//format used will be malenames[i][permuteset[i]] femalenames[permuteset[i]][i] to index the scores
for(k=0; k<numpeople; k++)
permuteset[k] = k;
inputdata(numpeople, &male, &female, fp);
permute(permuteset, 0, numpeople, &male, &female &maxLindex);
printf("Matching #%d: Maximum Score = %d\n\n", i, maxLindex);
for (j=0; j<numpeople; j++){
printf("%s %s\n", male.winning[j], female.winning[j]);
}
printf("\n\n");
}
return 0;
}
char** allocnames(int num) {
int i;
char** names = (char**)malloc(num*sizeof(char*));
for(i=0; i < num; i++)
names[i] = (char*)malloc(MAX_LEN+1);
return names;
}
int** allocratings(int num, int num2) {
int i;
int** ratings = (int**)malloc(num*sizeof(int*));
for(i=0; i < num; i++)
ratings[i] = (int*)malloc(num2*sizeof(int));
return ratings;
}
void inputdata(int numpeople, struct genderinfo *male, struct genderinfo *female, FILE* fp) {
int i, j;
for (i=0; i < numpeople; i++) {
fscanf(fp, "%s", male->names[i]);
//printf("%s ", malenames[i]);
}
for (i=0; i < numpeople; i++) {
fscanf(fp, "%s", female->names[i]);
//printf("%s ", femalenames[i]);
}
for (i=0; i < numpeople; i++) {
for (j=0; j < numpeople; j++) {
fscanf(fp, "%d", &male->scores[i][j]);
//printf("%d ", malescores[i]);
}
}
for (i=0; i < numpeople; i++) {
for(j=0; j < numpeople; j++) {
fscanf(fp, "%d", &female->scores[i][j]);
//printf("%d ", femalescores[i][j]);
}
}
}
void permute(int permuteset[], int k, int numpeople, struct genderinfo *male, struct genderinfo *female, int *maxLindex) {
int i;
if (k == numpeople) {
compare(permuteset, &male, &female, &maxLindex, numpeople);
}
else {
// Loop through each possible starting letter for index k,
// the first index for which we have a choice.
for (i=k; i<numpeople; i++) {
// Place the character stored in index j in location k.
swap(permuteset, k, i);
// Print out all of the permutations with that character
// just chosen above fixed.
permute(permuteset, 0, numpeople, &male, &female &maxLindex);
// Put the original character that used to be there back
// in its place.
swap(permuteset, i, k);
} //end i for
} //end else
}
void swap(int permuteset[], int i, int j) {
int temp = permuteset[i];
permuteset[i] = permuteset[j];
permuteset[j] = temp;
}
//This function will take a permutation in and compare malescores[i] to
//femalescores[permuteset[i]]
//if malescores[i] > femalescores[permuteset[i]] scoresum += bla blah else if.... etc.
//copy malenames[i] and femalenames[permuteset[i]] into winning couples
//with if statements above
//malescores[i][permuteset[i]]
//femalescores[permuteset[i]][i]]
void compare(int permuteset[], struct genderinfo *male, struct genderinfo *female, int *maxLindex, int numpeople) {
int temp_maxLindex, i, j, minlike;
for(i=0; i<numpeople; i++){
if (male->scores[i][permuteset[i]] > female->scores[permuteset[i]][i])
minlike = female->scores[permuteset[i]][i];
else
minlike = male->scores[permuteset[i]][i];
temp_maxLindex += minlike;
if (temp_maxLindex > maxLindex) {
maxLindex = temp_maxLindex;
for(j=0; j<numpeople; j++){
strcpy(male->winning[j], male->names[i]);
strcpy(female->winning[j], female->names[permuteset[i]]);
} //j for
} //if
} //i for
}
我收到这些错误,其中一个与我传递到我的 inputdata 函数中的内容有关,还有一堆其他关于冲突类型的错误?我现在已经对代码进行了一些修改,但没有任何进展。此时,我只是想让代码运行,以便我可以调试算法等等,非常感谢任何帮助。
D:\School\Summer 2012\CS1\Assignments\2\main.c||In function 'main':|
D:\School\Summer 2012\CS1\Assignments\2\main.c|61|error: invalid operands to binary & (have 'struct genderinfo *' and 'int')|
D:\School\Summer 2012\CS1\Assignments\2\main.c|61|error: too few arguments to function 'permute'|
D:\School\Summer 2012\CS1\Assignments\2\main.c|17|note: declared here|
D:\School\Summer 2012\CS1\Assignments\2\main.c|35|warning: unused variable 'difference' [-Wunused-variable]|
D:\School\Summer 2012\CS1\Assignments\2\main.c||In function 'permute':|
D:\School\Summer 2012\CS1\Assignments\2\main.c|139|warning: passing argument 2 of 'compare' from incompatible pointer type [enabled by default]|
D:\School\Summer 2012\CS1\Assignments\2\main.c|19|note: expected 'struct genderinfo *' but argument is of type 'struct genderinfo **'|
D:\School\Summer 2012\CS1\Assignments\2\main.c|139|warning: passing argument 3 of 'compare' from incompatible pointer type [enabled by default]|
D:\School\Summer 2012\CS1\Assignments\2\main.c|19|note: expected 'struct genderinfo *' but argument is of type 'struct genderinfo **'|
D:\School\Summer 2012\CS1\Assignments\2\main.c|139|warning: passing argument 4 of 'compare' from incompatible pointer type [enabled by default]|
D:\School\Summer 2012\CS1\Assignments\2\main.c|19|note: expected 'int *' but argument is of type 'int **'|
D:\School\Summer 2012\CS1\Assignments\2\main.c|153|error: invalid operands to binary & (have 'struct genderinfo **' and 'int *')|
D:\School\Summer 2012\CS1\Assignments\2\main.c|153|warning: passing argument 4 of 'permute' from incompatible pointer type [enabled by default]|
D:\School\Summer 2012\CS1\Assignments\2\main.c|133|note: expected 'struct genderinfo *' but argument is of type 'struct genderinfo **'|
D:\School\Summer 2012\CS1\Assignments\2\main.c|153|error: too few arguments to function 'permute'|
D:\School\Summer 2012\CS1\Assignments\2\main.c|133|note: declared here|
D:\School\Summer 2012\CS1\Assignments\2\main.c||In function 'compare':|
D:\School\Summer 2012\CS1\Assignments\2\main.c|194|warning: comparison between pointer and integer [enabled by default]|
D:\School\Summer 2012\CS1\Assignments\2\main.c|195|warning: assignment makes pointer from integer without a cast [enabled by default]|
||=== Build finished: 10 errors, 7 warnings ===|
最佳答案
--- permute.c.OLD 2012-06-14 22:48:06.760926525 +0200
+++ permute.c 2012-06-14 22:47:37.344810744 +0200
@@ -21,7 +21,7 @@
///write free functions for struct arrays
-int main () {
+int main (void) {
FILE* fp = fopen("matching.txt", "r");
@@ -32,7 +32,7 @@
int numdates, i, j, k;
//other variables
-int numpeople, maxLindex = 0, difference;
+int numpeople, maxLindex = 0; // difference;
fscanf(fp, "%d", &numdates);
@@ -58,7 +58,7 @@
permuteset[k] = k;
inputdata(numpeople, &male, &female, fp);
- permute(permuteset, 0, numpeople, &male, &female &maxLindex);
+ permute(permuteset, 0, numpeople, &male, &female, &maxLindex);
printf("Matching #%d: Maximum Score = %d\n\n", i, maxLindex);
@@ -136,7 +136,7 @@
if (k == numpeople) {
- compare(permuteset, &male, &female, &maxLindex, numpeople);
+ compare(permuteset, male, female, maxLindex, numpeople);
}
else {
@@ -150,7 +150,7 @@
// Print out all of the permutations with that character
// just chosen above fixed.
- permute(permuteset, 0, numpeople, &male, &female &maxLindex);
+ permute(permuteset, 0, numpeople, male, female, maxLindex);
// Put the original character that used to be there back
// in its place.
@@ -191,8 +191,8 @@
temp_maxLindex += minlike;
- if (temp_maxLindex > maxLindex) {
- maxLindex = temp_maxLindex;
+ if (temp_maxLindex > *maxLindex) {
+ *maxLindex = temp_maxLindex;
for(j=0; j<numpeople; j++){
摘要:缺少 kommaas、太多 & 符号、缺少星号。
我还没有检查语义错误,我认为它们仍然存在。 ( permute() 中的无界递归调用看起来很可疑)
我还建议删除 malloc() 返回值中的强制转换并使用惯用语 p = malloc N * sizeof *p);
但这会进一步增加差异的大小。
关于c - 传递结构指针的问题和 "conflicting types"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020644/
我刚接触 C 语言几周,所以对它还很陌生。 我见过这样的事情 * (variable-name) = -* (variable-name) 在讲义中,但它到底会做什么?它会否定所指向的值吗? 最佳答案
我有一个指向内存地址的void 指针。然后,我做 int 指针 = void 指针 float 指针 = void 指针 然后,取消引用它们以获取值。 { int x = 25; vo
我正在与计算机控制的泵进行一些串行端口通信,我用来通信的 createfile 函数需要将 com 端口名称解析为 wchar_t 指针。 我也在使用 QT 创建一个表单并获取 com 端口名称作为
#include "stdio.h" #include "malloc.h" int main() { char*x=(char*)malloc(1024); *(x+2)=3; --
#include #include main() { int an_int; void *void_pointer = &an_int; double *double_ptr = void
对于每个时间步长,我都有一个二维矩阵 a[ix][iz],ix 从 0 到 nx-1 和 iz 从 0 到 nz-1。 为了组装所有时间步长的矩阵,我定义了一个长度为 nx*nz*nt 的 3D 指针
我有一个函数,它接受一个指向 char ** 的指针并用字符串填充它(我猜是一个字符串数组)。 *list_of_strings* 在函数内部分配内存。 char * *list_of_strings
我试图了解当涉及到字符和字符串时,内存分配是如何工作的。 我知道声明的数组的名称就像指向数组第一个元素的指针,但该数组将驻留在内存的堆栈中。 另一方面,当我们想要使用内存堆时,我们使用 malloc,
我有一个 C 语言的 .DLL 文件。该 DLL 中所有函数所需的主要结构具有以下形式。 typedef struct { char *snsAccessID; char *
我得到了以下数组: let arr = [ { children: [ { children: [], current: tru
#include int main(void) { int i; int *ptr = (int *) malloc(5 * sizeof(int)); for (i=0;
我正在编写一个程序,它接受一个三位数整数并将其分成两个整数。 224 将变为 220 和 4。 114 将变为 110 和 4。 基本上,您可以使用模数来完成。我写了我认为应该工作的东西,编译器一直说
好吧,我对 C++ 很陌生,我确定这个问题已经在某个地方得到了回答,而且也很简单,但我似乎找不到答案.... 我有一个自定义数组类,我将其用作练习来尝试了解其工作原理,其定义如下: 标题: class
1) this 指针与其他指针有何不同?据我了解,指针指向堆中的内存。如果有指向它们的指针,这是否意味着对象总是在堆中构造? 2)我们可以在 move 构造函数或 move 赋值中窃取this指针吗?
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: C : pointer to struct in the struct definition 在我的初学者类
我有两个指向指针的结构指针 typedef struct Square { ... ... }Square; Square **s1; //Representing 2D array of say,
变量在内存中是如何定位的?我有这个代码 int w=1; int x=1; int y=1; int z=1; int main(int argc, char** argv) { printf
#include #include main() { char *q[]={"black","white","red"}; printf("%s",*q+3); getch()
我在“C”类中有以下函数 class C { template void Func1(int x); template void Func2(int x); }; template void
我在64位linux下使用c++,编译器(g++)也是64位的。当我打印某个变量的地址时,例如一个整数,它应该打印一个 64 位整数,但实际上它打印了一个 48 位整数。 int i; cout <<
我是一名优秀的程序员,十分优秀!