我有一个算法,它应该显示两个数组是否相似。它有效,但我不知道数组的大小应该是什么。
例如:
int a[10], i = 0, r = 0, n = 0;
printf("Enter the amount of numbers in arrays: ";
scanf("%d", &n);
printf("Enter the numbers of array: ";
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
如果输入“n”变量n = 11,程序将在结束时停止。我的问题是:我应该为数组添加一个数字[ THAT_PLACE ],以确保该程序与大多数硬件兼容(我听说这也取决于内存。)
@ UPDATE1:
我选择了 alk 解决方案。但它仍然无效。这是我的代码:
int main()
{
int i = 0, temp_a = 0, switch_a = 0, temp_b = 0, switch_b = 0, n = 0;
printf("Enter the amount of numbers in arrays: ");
scanf("%d", &n);
{
int a[n], b[n];
printf("Enter elements of first array: ");
for (i = 0; i < n; ++i)
{
scanf("%d", &a[i]);
}
printf("Enter elements of second array: ");
for (i = 0; i < n; ++i)
{
scanf("%d", &b[i]);
}
do
{
switch_a = 0;
for (i = 0; i < n - 1; i++)
{
if (a[i] > a[i + 1])
{
switch_a = switch_a + 1;
temp_a = a[i];
a[i] = a[i + 1];
a[i + 1] = temp_a;
}
}
} while (switch_a != 0);
//bubble sort
do
{
switch_b = 0;
for (i = 0; i < n - 1; i++)
{
if (b[i] > b[i + 1])
{
switch_b = switch_b + 1;
temp_b = b[i];
b[i] = b[i + 1];
b[i + 1] = temp_b;
}
}
} while (switch_b != 0);
//Cheks, if an arrays are the same.
for (i = 0; i < n; i++)
{
if (a[i] != b[i])
{
printf("This two arrays don't have the same elements.\n\n\n");
return 0;
}
}
printf("This two arrays have the same elements.\n\n\n");
}
return 0;
}
你可以帮我查一下吗?我找不到有什么问题......
答案 0 :(得分:2)
您的数组a
只能包含10个int
。因此,如果您输入n
为11,那么由于越界访问,您有undefined behaviour。
您可以使用C99 VLA(可变长度数组)或使用malloc()
系列函数使用动态内存分配。
注意:VLA在C11中是可选的。因此,您可能希望使用宏__STDC_NO_VLA__
来检查您的实现是否不支持它。
VLA的潜在问题(具有自动存储持续时间 - 通常称为“堆栈”)是很难确定大型阵列的分配是否成功。
答案 1 :(得分:2)
如果您不能(或您不想)使用VLA,请使用malloc:man malloc
示例:
int *buffer;
int dim;
printf("Enter the amount of numbers in arrays: ");
scanf("%d", &dim);
buffer = (int*) malloc(sizeof(int) * dim);
if (buffer == NULL) {
perror("Malloc error");
exit(-1);
}
有关malloc的更多信息:Stack Overflow: How do malloc() and free() work?
答案 2 :(得分:1)
如果您使用的C实现支持可变长度数组,那么只需执行:
int i = 0, r = 0, n = 0;
printf("Enter the amount of numbers in arrays: ";
scanf("%d", &n);
{
int a[n];
printf("Enter the numbers of array: ";
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
...