3
I’m a beginner in C and I’m 2 days into this exercise, I was able to do it so that if you increase the vector with the function realloc
, it will increase everything right, but I need him to keep the values you typed in.
For example, I want a vector of 2 positions, and then I will reallocate it with + 3 positions, it should not ask to insert all the values of the vector again but enable to insert values ONLY for these 3 new positions.
How to make it store what has already been stored at a first moment in the vector?
Not I was able to leave stored the values that the user type the first time when the vector is allocated and then only populate by reallocating the values of the NEW POSITIONS, that is, let the user fill in new values only in these new positions and KEEP PREVIOUSLY TYPED NUMBERS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p;
int i,k,n;
printf ("\nDigite a quantidade de numeros que serao digitados: ");
fflush(stdin);
scanf ("%d",&i); // a variavel i vai receber a quantidade de numeros que sera necessario para o vetor
/* a função malloc reserva espaço suficiente para um vetor de inteiros.
caso sejam digitados 5 elementos serão reservados 20 bytes, pois cada
inteiro ocupa 4 bytes na memória */
p=(int*)malloc(i*sizeof(int)); // Aloca um espaço de memoria para um vetor de inteiros
if (p==NULL) // verifica se ha memoria disponivel ANTES de habilitar para preencher vetor
{
printf ("\nERRO.MEMORIA INSUFICIENTE");
exit(1);
}
for (k=0;k<i;k++) // preenche o vetor
{
printf ("\nDigite o %d numero do vetor: ",k+1);
fflush(stdin); //limpar buffer do teclado
scanf ("%d",&p[k]);
}
printf ("\n\n\t\t========== VETOR PREENCHIDO ==========\n");
for (k=0;k<i;k++) // Mostra vetor preenchido
{
printf ("\t\t%d",p[k]);
}
printf ("\n\nSeu vetor possui %d elementos.",i);
printf ("\nDigite um valor positivo para aumentar ao vetor.");
printf ("\n\n");
fflush(stdin);
scanf ("%d",&n); // n vai receber a quantidade de posicoes que tera de ser realocado o vetor para inserção de novos numeros
if ((i+n)<0) // Testa para ver se o usuario vai digitar um valor positivo para aumentar o vetor dinamicamente
{
printf ("\nSeu vetor possui quantidade negativa de elemento.\n\nIMPOSSIVEL ALOCAR MEMORIA.\n\n");
free(p);
return 0;
system("pause");
}
/* a função realloc aumenta (numero positivo) ou diminui (numero negativo), o tamanho do
vetor dinamicamente. ela recebe o ponteiro para o vetor anterior e retorna o novo espaço alocado */
p=(int*)(realloc(p,(i+n)*sizeof(int))); // REaloca um espaço de memoria para a quantidade informada
if (p==NULL) //Testa novamente mas agora para saber se ha espaço disponivel para a REalocacao
{
printf ("\nERRO DE REALOCACAO.MEMORIA INSUFICIENTE");
exit(1);
}
for (k=0;k<(n+i);k++) // Aceita preencher com os novos valores do vetor aumentado dinamicamente
{
printf ("\nDigite o %d numero do vetor: ",k+1);
fflush(stdin);
scanf ("%d",&p[k]);
}
printf ("\n\n\t\t========== VETOR PREENCHIDO REALOCADO ==========\n");
for (k=0;k<(n+i);k++) // Mostra vetor REalocado
{
printf ("\t\t%d",p[k]);
}
free(p); // Libera o espaço de memoria que utilizamos
return 0;
system("pause");
}
Switch compiler, this one is very old and will teach you to do everything wrong, or see if you have to configure it to use C99.
– Maniero
Sorry, I accidentally deleted the comment, I wanted to edit it. I’m just a beginner yet, how do I change to C99? (I don’t know what that is)
– weise
GOT IT BUDDY, I’m using Codeblocks, I was able to activate C99, I went to Settings>Compiler>, and I checked the option -Std=C99... but what is it? heheheheh
– weise
You were using a very old C configuration, 99 is the year of standardization. Codeblocks is not a compiler, it’s just an IDE. https://answall.com/q/101691/101
– Maniero
@Weise: C99 is this here. Has also C89/C90 and C11.
– Wtrmute