Tag: array

将数字存储为(x,y)从特定点的文件中进行控制

我有一个实例文件 ,我需要以2Darrays系统的forms存储NUM_PT和所有相应的坐标( 个人选择,以便我可以轻松访问它们 )。 我能够检索NUM_PT但我仍然在阅读连续的坐标到我的数组中。 这是我做的 /* Assignment 2 */ #include #include #include #include #include #define MAXS 256 int main(int argc, char *argv[]) { int num_pt; int inputfile = 0, outputfile = 0, i; for (i = 1; i %s [-i inputfile [-o outputfile]]\n\n”, argv[0]); exit(0); } FILE *fp; fp = fopen(argv[inputfile], “r”); int count […]

如何从文本文件中读取多个数字

所以这是我的代码,我不断收到分段错误。 如何格式化此代码以从文件中读取一组数字? 我的输入看起来像这样:82,46,71,56,44,12,100 62,67,64,65,62,39,68 68,90,78,57,76,45,82等 #include int main () { FILE *input = fopen(“input.txt”, “r”); int line[7]; int store = 0, read; if(!input) { printf(“Error: Filename \”input.txt\” not found!\n”); } store = 0; while(fscanf(input, “%d”, &read) != EOF) { line[store] = read; store++; } printf(“%d %d %d %d %d %d %d\n”, line[0], line[1], line[2], line[3], […]

如何从文件中将数字扫描到数组?

假设我有一个带有数字的文件:1 2 3 4 5 6 7 8 9 10 -1 我想读取该文件并存储该文件的所有值,停在控制变量-1。 因此,如果我将该数组打印到另一个文件,它看起来像:1 2 3 4 5 6 7 8 9 10 这给了我所有的数字,但它包括-1。 怎么能掉掉-1? int arr[100]; int n; while (scanf(“%d”,&arr[n]) > 0) n++;

如何在C中找到动态分配的数组的大小?

我创建了一个由循环动态分配的数组。 然后是一个循环,从数组中读取数字,但我需要知道数组的大小。 该数组正确且完全正常,并且其中包含正确的值。 我像这样定义了数组: int *array; 现在当我想使用它时它不会工作因为我使用指针: int size = sizeof(array)/sizeof(array[0]); 我如何修复它,以便它与我的指针一起工作?

sizeof应用于数组类型

c11标准说尺寸, “当应用于具有数组类型的操作数时,结果是数组中的总字节数” (6.5.3.4,子弹4)。 脚注(103)说: “当应用于声明具有数组或函数类型的参数时,sizeof运算符会产生调整后的(指针)类型的大小”。 我从中可以看出,当应用于数组类型时,sizeof给出了数组的大小(元素的数量x元素的大小),但是应用于声明为具有数组类型的参数,它给出了指针的大小。 我的问题: 由于脚注,如何使数组类型的对象不会产生指针的大小? 在不知情的情况下,我觉得在某些情况下我无法信任sizeof运算符。 谢谢。 编辑:我想我应该澄清我的担忧,如果定义了“int a [4]”,那么我从响应中看到a == 4 * sizeof(int)的sizeof,但是sizeof(a + 0)呢? 看来sizeof(a + 1)必须被评估为指针。 我担心除了函数调用之外的情况,其中数组衰减到指针。

获取输入的五个数字的最小值,最大值和最大值

我正在尝试使用C中的程序来获取5个输入数字,然后将它们存储在一个数组中。 得到5个数字后, 我必须得到输入的MINIMUN和MAXIMUM数的最小值,最大值和平均值,而不是全部的5个。 所以这是我制作的代码。 当我得到最大数量,它似乎工作正常。 但是当它到达最小值时,它仍然与最大值相同,因此我将获得不同的平均值。 #include #include int main() { int num[5]; int counter, min, max=0; float average, total; min=num; for(counter=1; countermax) { max = num[5]; } if (num[5]<min) { min = num[5]; } } total = min + max; average = total/2; printf("The maximum number is: %d\n", max); printf("The minimum number is: %d\n", […]

2D数组和malloc的MPI_Scatter

我正在尝试使用MPI库在C中编写程序,其中主进程创建一个2D数组并将其行分配给其他进程。 矩阵具有维度p*p ,其中p是处理的数量。 这是代码: #include #include #include #include int **createMatrix (int nrows, int ncols) { int **matrix; int h, i, j; if (( matrix = malloc(nrows*sizeof(int*))) == NULL) { printf(“Malloc error”); exit(1); } for (h=0; h<nrows; h++) { if (( matrix[h] = malloc( ncols * sizeof(int))) == NULL) { printf("Malloc error 2"); exit(1); } } […]

何时在C中使用可变长度数组,但是在动态分配时?

我在C99中找到了可变长度数组,但看起来它的行为与malloc + free几乎相同。 我找到的实际差异: 太大的arrays处理: unsigned size = 4000000000; int* ptr = malloc(size); // ptr is 0, program doesn’t crash int array[size]; // segmentation fault, program crashes 内存泄漏:只能在动态数组分配中使用: int* ptr = malloc(size); … if(…) return; … free(ptr); 对象的生命和从函数返回的可能性:动态分配的数组生命直到内存被释放,并且可以从分配内存的函数返回。 resize:仅使用指向已分配内存的指针resize。 我的问题是: 有什么更多的差异(我对实用建议感兴趣)? 程序员可以使用两种具有可变长度的数组的方式有什么问题? 何时选择VLA但是在动态arrays分配时? 什么是更快:VLA或malloc +免费?

“sizeof(arr )”会导致未定义的行为吗?

有一个众所周知的模式来计算数组长度: int arr[10]; size_t len = sizeof(arr) / sizeof(arr[0]); assert(len == 10); 此模式适用于静态数组和常量大小的自动数组。 它也适用于C99中的可变长度数组。 我想应用类似的想法来计算动态数组大小(以字节为单位): size_t known_len = 10; int *ptr = malloc(known_len * sizeof(int)); size_t size = known_len * sizeof(ptr[0]); assert(size == known_len * sizeof(int)); 这比known_len * sizeof(int)更好,因为sizeof(ptr[0])不引用实际的数组元素类型。 因此,它不需要代码的读者知道类型。 但是我不清楚表达式sizeof(ptr[0])会导致不确定的行为。 随着它扩大: sizeof(ptr[0]) -> sizeof(*((ptr) + (0))) -> sizeof(*ptr) 如果ptr为0 ,结果表达式是有问题的: sizeof(*((int*) 0)) 根据C99标准: (C99,6.3.2.3p3):“值为0的整型常量表达式,或者类型为void […]

无法将数组从FORTRAN传递到C.

我试图将一个维度数组从FORTRAN程序传递给C. 调用C函数,但它保存的值是垃圾。 但是如果我尝试使用整数变量调用相同的函数,我可以传递所需的值。 任何人都可以帮我解决这个问题吗? 我使用的代码与此类似 文件:fortran_prog.f program test real*4 :: a(4) data a / 1,2,3,4 / call test_func(a) end program test 文件:c_prog.c int test_func(double a[]) { int i; for(i=0;i<4;i++) { printf("%f\n",a[i]); } return 0; }