Tag: 数组

使用数组在C中创建switch语句?

我正在尝试创建一个switch语句,它将一个单词输入一个数组,然后通过switch语句抛出每个字母,并根据它所在的字母为每个字母分配一个点,并给出该单词的最终点值,然后我似乎无法使arrays部分正确。 任何帮助,将不胜感激! int main(){ int letter_points = 0; char word[7]; int word_length = 7; int i; printf(“Enter a Word\n”); scanf(“%s”, word); for(i = 0; i < word_length; i++){ switch(word){ //1 point case 'A': case 'E': case 'I': case 'L': case 'N': case 'O': case 'R': case 'S': case 'T': case 'U': letter_points++; break; //2 points […]

将数组称为指针

我似乎无法理解数组或2d数组上的不同声明之间的区别。 例如: void swap(char **a, char **b) { char *t = *a; *a = *b; *b = t; } int main(int argc, char **argv) { char a[] = “asher”; char b[] = “saban”; swap(&a,&b); } 这段代码没有编译,它输出: warning: passing argument 1 of ‘swap’ from incompatible pointer type test.c:10: note: expected ‘char **’ but argument is of […]

将CSV元素导入C中的2D数组

我是C的新手。我一直在尝试将csv文件中的整数元素导入C中的数组。当我必须导入行和列较少的CSV文件时,代码工作正常; 例如,我已经尝试使用包含90行和80列的CSV文件。 但是,当CSV具有更多行/列数时,问题就开始了。 具体来说,我正在尝试导入包含238行和320列的CSV文件。 但是程序终止显示“导致该程序停止工作的问题”。 我在代码中提到程序出错了。 请帮帮我,因为我无法知道这个问题背后的原因。 我在其他地方搜索过,但没有找到特定于C的答案。另外,Stackoverflow上有一个类似的问题:(因为,它是针对一维数组,我的方法有所不同,我决定在这里问一个新问题。) CSV到C中的数组 以下是CSV文件的具体链接: https : //drive.google.com/file/d/0BxnaWIgBd3AjbGVrY1FTdFpxemM/edit?usp=sharing 这是我的代码: #include #include #define ARRAYSIZE(x) (sizeof(x)/sizeof(*(x))) int main(void) { const char filename[] = “1.csv”; /* * Open the file. */ FILE *file = fopen(filename, “r”); if ( file ) { int array[320][238]; size_t i, j, k; char buffer[BUFSIZ], *ptr; /* * Read […]

如何定义未指定大小的C数组,作为Objective-C中的实例变量

在Objective-C中,如何将“未知大小”的C数组定义为实例变量,然后填充数组? (背景) :我在Objective-C中有一个类来处理加载游戏数据。 数据存储在C结构数组中,包含在外部数据文件中。 我可以加载数组并访问它,但我需要它可以在整个类中访问。 我要做的是在我的实例变量中声明一个’empty’数组然后(加载时)指向这个空数组或用我加载的数组替换它。 这就是我在我的数据中加载的方式…… FILE *fptr = NULL; fptr = fopen([path cStringUsingEncoding:NSUTF8StringEncoding], “r”); // Create an empty array of structs for the input file with known size frame2d newAnimationData[28]; // Read in array of structs fread(&newAnimationData, sizeof(newAnimationData), 1, fptr); fclose(fptr); 所以这段代码可以很好地重新创建我的frame2d结构数组 – 我只需要知道如何将它用作实例变量。 任何帮助表示赞赏,谢谢。

指向2darrays和手动内存管理的指针 – C.

我认为在纯C中构建一个处理各种矩阵计算的库是一个很好的挑战。现在,尽管我对Objective-C和Cocoa有一些非常好的经验,但我对C的知识才是我需要的。使用Objective-C而不是更多。 所以,例如,我熟悉C中指针,数组等的概念,但不熟悉malloc和free(ARC是幸福!)。 我决定接受这个项目,这样我就可以获得更多的C体验(当然,除了有很多乐趣之外!)。 到目前为止,我有一个像这样定义的矩阵: typedef float mReal; typedef struct { mReal **v; int w; int h; } matrix; 当然,我还需要一种方法来为我提供一个我想要的全新矩阵: void new_matrix(matrix *m, int w, int h) { m = malloc(sizeof(matrix)); m->w = w; m->h = h; m->v = malloc(w * sizeof *(m->v)); for (int i = 0; i v[i] = malloc(h * sizeof *(m->v[i])); } […]

将struct传递给函数

嘿我不确定为什么当我将一个Struct数组传递给一个函数时; 当我尝试访问它的成员时,它打印随机数。 语句“printf(”%d \ n“,netTopo [0] .nodes [1]);” 工作正常,但我在函数中尝试打印相同的数据,它打印一堆随机数? 不知道我做错了什么。 int main(int argc, char *argv[]) { if (argc != 3){ printf(“Incorrect command line arguments. Required 2 files.\n”); exit(-1); } FILE *netFile, *schFile; // put into a loop netFile = fopen(argv[1], “r”); schFile = fopen(argv[2], “r”); int *sched = getSchedFile(schFile); struct nodeInfo *netTopo = getTopology(netFile); printf(“%d\n”, […]

将数组重新排列为与另一个数组相比最佳

我已经达到了我的程序中最简单的部分,但我有点迷失,关于我如何能够做到这一点并同时保持高效。 attacker= {3,10,14,15,17,18}; defender = {1,5,7,9,12,18}; 所以这两个都是两个长度相同的数组,也是排序的。 为了将其置于上下文中,两个数组中的数字表示用户输入的滚动。 除了这种风险之外,允许防守者重新安排他的arrays,以便他可以赢得更多的战斗。 如果他愿意,他可以将5和3配对。 我迷失了如何做到这一点,而不是非常低效或容易出错。

在C中使用字符串有哪些第三方选项?

我已经知道有一段时间我在Python中编码的速度比在C中快17倍,我想我有点假设我不是一个程序员,直到我真正想到它并意识到唯一的问题是我能够处理C字符串/字符数组/字符指针/无论如何。 我对它们有一个阻碍,操纵它们需要几个小时。 我在C ++中没有这个问题。 但生活迫使我现在用纯C编码,我试图找到是否有一些我可以添加的第三方库,这将使我的生活更轻松。 我做了一些谷歌搜索,我真的没有找到太多。 我开始考虑自己做,但我觉得我要重新发明轮子。 肯定有什么东西在那里? 有谁知道这样的事情? 在这方面使C更像C ++的东西。 我意识到这是一个愚蠢的想法,因为这是C ++的重点,但你理解,我敢肯定。

将1D char *分区为2D char **

关于将2Darrays转换为1Darrays存在很多问题,但我正在尝试恰恰相反。 我正在尝试将字符串分区为常量长度的子字符串,并将它们放在2D数组中。 此2D矩阵的每一行应包含初始字符串的子字符串,如果要连续读取每个行并连接,则应重现初始字符串。 我几乎让它工作,但由于某种原因,我丢失了初始字符串(bin)的第一个子字符串(partitions [0] – length 8 * blockSize): int main (void){ char* bin = “00011101010000100001111101001101000010110000111100000010000111110100111100010011010011100011110000011010”; int blockSize = 2; // block size in bytes int numBlocks = strlen(bin)/(8*blockSize); // number of block to analyze char** partitions = (char**)malloc((numBlocks+1)*sizeof(char)); // break text into block for(int i = 0; i<numBlocks;++i){ partitions[i] = (char*)malloc((8*blockSize+1)*sizeof(char)); memcpy(partitions[i],&bin[8*i*blockSize],8*blockSize); partitions[i][8*blockSize] […]

在C中将int转换为char

#include char* intToString(int N); int power(int N, int M) { int n = N; if (M ==0) return 1; int i; for( i = 1; i 1) { M /= 10;numberLen++; } int ar[numberLen]; char str[numberLen + 1]; int i; for(i = 0; i < numberLen; i++) { str[numberLen – i – 1] = (N%power(10,i+1))/(power(10,i)); […]