在用户输入特定数字之前,有什么方法可以创建数组吗?
Is there any way to create an array until user enters a specific number?
当我们创建一个大小未知的数组时,我们使用 malloc()
函数。
这是我想从用户那里获取数组大小作为输入的代码。
int* ptr, len;
printf("Please enter the size number:");
scanf_s("%d", &len);
ptr = (int*)malloc(len * sizeof(int));
for (int i = 0; i < len; i++)
{
printf("Enter the %d. number: ", i+1);
scanf_s("%d", ptr + i);
}
但问题来了
我想构建一个应用程序,其中用户不指示任何大小值并输入数字以便将它们放入数组中。数组正在填充但没有任何限制。它最初没有像我上面的代码那样分配任何内存。唯一的限制是用户输入一个特定的数字(比如-5),然后阵列被停止。并打印出这些值。
本质上:我正在寻找内存分配,但分配将根据特定的用户输入决定。
无限运行代码且从不显示数组的 Realloc 编辑
int i = 0,ctr=0;
int* ptr = (int*)malloc(sizeof(int));
do
{
printf("Enter the %d. value: \n",i+1);
scanf_s("%d", ptr + i);
ctr += 1;
ptr = (int*)realloc(ptr, (i + 2) * sizeof(int));
i += 1;
} while (*(ptr+i)!=-1);
这对我有用。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *ptr,n;
ptr = (int *)malloc(sizeof(int)); //
int i = 0;
while(1)
{
puts("Enter a number");
scanf(" %d",&n);// Take the value
if(n == -5) //
{
*(ptr + i) = n; //if you don't wish to add -5 to your array remove this
// statement and following i++
i++;
break;
}
else
{
*(ptr + i) = n;
ptr = realloc(ptr,(i+2)*sizeof(int));// reallocating memory and
// passing the new pointer as location in memory can
// change during reallocation.
i++;
}
}
int end = i;// Saving the number of elements.
for(i=0;i<end;i++)
printf(" %d\n",ptr[i]);
return 0;
}
您可以使用标准函数 realloc
或定义一个列表。在最后一种情况下,对列表元素的访问将是 sequantil。
这是一个演示程序,展示了如何使用函数 realloc
输入以标记值结尾的数字序列。
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int *p = NULL;
size_t n = 0;
int allocation_failed = 0;
const int Sentinel = -1;
printf( "Enter a sequence of values (%d - exit): ", Sentinel );
for (int value; !allocation_failed &&
scanf( "%d", &value ) == 1 &&
value != Sentinel; )
{
int *tmp = realloc( p, ( n + 1 ) * sizeof( *p ) );
if (!( allocation_failed = tmp == NULL ))
{
p = tmp;
p[n++] = value;
}
}
for (size_t i = 0; i < n; i++ )
{
printf( "%d ", p[i] );
}
putchar( '\n' );
free( p );
}
程序输出可能看起来像
Enter a sequence of values (-1 - exit): 0 1 2 3 4 5 6 7 8 9 -1
0 1 2 3 4 5 6 7 8 9
注意你不能在 realloc 的调用中使用相同的指针,例如
int *p = realloc( p, ( n + 1 ) * sizeof( *p ) );
因为通常函数 realloc
可以 return 一个空指针。在这种情况下,由于重新分配指针 p
将成为空指针,已分配内存的地址将丢失。
当我们创建一个大小未知的数组时,我们使用 malloc()
函数。
这是我想从用户那里获取数组大小作为输入的代码。
int* ptr, len;
printf("Please enter the size number:");
scanf_s("%d", &len);
ptr = (int*)malloc(len * sizeof(int));
for (int i = 0; i < len; i++)
{
printf("Enter the %d. number: ", i+1);
scanf_s("%d", ptr + i);
}
但问题来了 我想构建一个应用程序,其中用户不指示任何大小值并输入数字以便将它们放入数组中。数组正在填充但没有任何限制。它最初没有像我上面的代码那样分配任何内存。唯一的限制是用户输入一个特定的数字(比如-5),然后阵列被停止。并打印出这些值。
本质上:我正在寻找内存分配,但分配将根据特定的用户输入决定。
无限运行代码且从不显示数组的 Realloc 编辑
int i = 0,ctr=0;
int* ptr = (int*)malloc(sizeof(int));
do
{
printf("Enter the %d. value: \n",i+1);
scanf_s("%d", ptr + i);
ctr += 1;
ptr = (int*)realloc(ptr, (i + 2) * sizeof(int));
i += 1;
} while (*(ptr+i)!=-1);
这对我有用。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *ptr,n;
ptr = (int *)malloc(sizeof(int)); //
int i = 0;
while(1)
{
puts("Enter a number");
scanf(" %d",&n);// Take the value
if(n == -5) //
{
*(ptr + i) = n; //if you don't wish to add -5 to your array remove this
// statement and following i++
i++;
break;
}
else
{
*(ptr + i) = n;
ptr = realloc(ptr,(i+2)*sizeof(int));// reallocating memory and
// passing the new pointer as location in memory can
// change during reallocation.
i++;
}
}
int end = i;// Saving the number of elements.
for(i=0;i<end;i++)
printf(" %d\n",ptr[i]);
return 0;
}
您可以使用标准函数 realloc
或定义一个列表。在最后一种情况下,对列表元素的访问将是 sequantil。
这是一个演示程序,展示了如何使用函数 realloc
输入以标记值结尾的数字序列。
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int *p = NULL;
size_t n = 0;
int allocation_failed = 0;
const int Sentinel = -1;
printf( "Enter a sequence of values (%d - exit): ", Sentinel );
for (int value; !allocation_failed &&
scanf( "%d", &value ) == 1 &&
value != Sentinel; )
{
int *tmp = realloc( p, ( n + 1 ) * sizeof( *p ) );
if (!( allocation_failed = tmp == NULL ))
{
p = tmp;
p[n++] = value;
}
}
for (size_t i = 0; i < n; i++ )
{
printf( "%d ", p[i] );
}
putchar( '\n' );
free( p );
}
程序输出可能看起来像
Enter a sequence of values (-1 - exit): 0 1 2 3 4 5 6 7 8 9 -1
0 1 2 3 4 5 6 7 8 9
注意你不能在 realloc 的调用中使用相同的指针,例如
int *p = realloc( p, ( n + 1 ) * sizeof( *p ) );
因为通常函数 realloc
可以 return 一个空指针。在这种情况下,由于重新分配指针 p
将成为空指针,已分配内存的地址将丢失。