编写一个程序,要求用户输入数组大小为“n”的值,并用n个整数填充数组。然后反转阵列并将其打印在屏幕上。 我正在使用Visual Studio,到目前为止: 我在“int arr1 [size]”中遇到“大小”问题。它说它必须是一个恒定的值。
#include <stdio.h>
int main(void)
{
int size, i;
printf("Enter the size of the arrays:\n");
scanf("%d", &size);
int arr1[size];
printf("Enter the elements of the array:\n");
for (i = 0; i < size; i++) {
scanf_s("%d", arr1[size]);
}
printf("The current array is:\n %d", arr1[i]);
}
答案 0 :(得分:1)
您无法使用静态内存分配来分配具有动态大小的阵列。您需要通过操作系统动态请求将内存分配给您的程序,无论用户要求的动态大小如何。
这是一个开始的例子:
#include <stdlib.h>
#include <stdio.h>
void printArray(int *array, int size) {
// Sample array: [1, 2, 3, 4, 5]
printf("["); // [
for (int i = 0; i < size - 1; i++) { // [1, 2, 3, 4,
printf("%i, ", array[i]);
}
if (size >= 1) printf("%i", array[size-1]); // [1, 2, 3, 4, 5
printf("]\n"); // [1, 2, 3, 4, 5]
}
int main(void) {
int count;
printf("Enter the size of the array:\n");
scanf("%d", &count);
// ask for enough memory to fit `count` elements,
// each having the size of an `int`
int *array = malloc(count * sizeof(*array));
if (!array) {
printf("There was a problem with malloc.");
exit(EXIT_FAILURE);
}
printf("Enter the elements of the array:\n");
for (int i = 0; i < count; i++) scanf("%d", &array[i]);
printArray(array, count);
//do stuff
free(array);
}
答案 1 :(得分:1)
C的某些方言有variable-length arrays(VLA),特别是C99(而GCC接受them ....)
但是你的老师可能希望你理解C dynamic memory allocation,你也应该在scanf
fails时进行测试,这样你就可以编码:
int main(void) {
int size, i;
printf("Enter the size of the arrays:\n");
if (scanf("%d", &size)<1) {
perror("scan size");
exit(EXIT_FAILURE);
};
实际上,您最好对size
为负面的情况进行测试!我把它留给你。
int *arr1 = calloc(size, sizeof(int));
if (arr1==NULL) {
perror("calloc arr1");
exit(EXIT_FAILURE);
}
您始终需要处理calloc
或malloc
printf("Enter the elements of the array:\n");
for (i = 0; i < size; i++) {
if(scanf("%d", &arr1[size])<1) {
perror("scanf arr1[size]");
exit(EXIT_FAILURE);
}
}
scanf_s
is仅存在于C11中,并且符合C11标准的实施,您可以使用VLA s
我把剩下的留给你了。您希望编写for
循环来打印数组的每个元素。
当然你应该致电free
appropriately(我要把它留给你)。否则,你有一个memory leak。有些系统有valgrind来帮助搜寻它们。不要忘记编译所有警告&amp;调试信息(GCC使用gcc -Wall -g
)然后使用调试器(例如gdb
)。
不要忘记编程语言是规范(在某些文档中编写),而不是软件。您可能想要浏览n1570。你需要了解undefined behavior的含义。
答案 2 :(得分:0)
在C中,无法以这种方式使用用户定义的大小定义数组。
方式不正确:
int size, i;
printf("Enter the size of the arrays:\n");
scanf("%d", &size);
int arr1[size];
正确方式:
int size ;
int *arr1 ;
printf("Enter the size of the arrays:\n");
scanf("%d", &size);
arr1 = (int *) malloc(sizeof(int) * size);