Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Amigo eu estou com um problema quando eu acesso a primeira funcao do meu programa "inserir" eu queria que toda a vez que ele acessar essa função ele reserve +1 espaço na memória e coloque um caracter só que ele libera 2 alguém poderia me ajudar?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int tam=0;
void inserir(char**p);
void inserirp(char **p);
void alterarp(char *p);
void excluirp(char **p);
void listar(char *p);
void limpar(char **p);
int main()
{
char opcao = 'n';
char op;do
{
system("cls");
//Menu
printf("**************************De a opcao**************************");
printf("\n1 Para inserir um caractere");
printf("\n2 Para inserir um caractere em uma posicao especifica do vetor");
printf("\n3 Para alterar um determinado caractere do vetor");
printf("\n4 Excluir o caractere de uma determinada posicao");
printf("\n5 Listar todos os caracteres do vetor");
printf("\n6 Limpar o vetor");
printf("\n7 Sair\n\n");
fflush(stdin);
scanf("\n\n%c", &op);
switch(op) //Case leva a opção para função correspondente
{
case '1':
inserir(&ptr);
break;inserirp(&ptr);
break;alterarp(ptr);
break;excluirp(&ptr);
break;listar(ptr);
break;limpar(&ptr);
break;printf("\n\nDeseja realmente sair?");
fflush(stdin);
scanf("%c", &opcao);
}
break;system("cls");
printf("Não existe a opcao");
printf("\n\nPressiona qualquer tecla para continuar");
getch();
}
}
}while(opcao =='n');
system("cls");
printf("\n\nPressiona qualquer tecla para continuar\n\n");
return 0;
getch();
}
void inserir(char **p) //Funcao que insere um caracter em sequencia do ultimo inserido e dimenciona o vetor para o numero de caracters existentes
{
int k=0;
char caractere;
printf("%i", k);printf("%i", k);
printf("\nDe o caractere: ");
fflush(stdin);
scanf("%c", &caractere); //NAO ESQUECER DO & NO SCANF NA VÁRIAVEL QUE você ESTA RECEBENDO POR QUE você ESTA RECEBENDO O COMEÇO
*(*p+k) = caractere;
printf("Caractere inserido '%c' inserido com sucesso", caractere);
getch();
return 0;
}
void inserirp(char **p) //insere um caracter numa posicao qualquer se ela não existe dentro do vetor é realocado a memória até esse vetor
{
int posicao, k;
char caracter;
printf("\nDigite a posicao: ");
fflush(stdin);
scanf("%i", &posicao);
printf("\nDigite o caractere: ");
fflush(stdin);
scanf("%c", &caracter);
if ( posicao <= tam)*(*p+posicao) = caracter;
printf("\nCaractere '%c' inserido com sucesso", caracter);
}k = (posicao - tam) + tam;
tam = k;
*p = (char*) realloc(*p, k* sizeof(char));
*(*p+posicao) = caracter;
printf("\nCaractere '%c' inserido com sucesso", caracter);
}
printf("\n\nPressiona qualquer tecla para continuar");
getch();
}
void alterarp(char *p) //alterar um caractere dentro do vetor existente não redimenciona o vetor
{
int posicao;
char caracter;
printf("\nDigite a posicao: ");
fflush(stdin);
scanf("%i", &posicao);
printf("\nDigite o caractere: ");
fflush(stdin);
scanf("%c", &caracter);
if ( posicao <= tam)*(p+posicao) = caracter;
printf("Caracter alterado com sucesso");
}printf("Essa posicao não existe:");
}
printf("\n\nPressiona qualquer tecla para continuar");
getch();
}
void excluirp(char **p) //tira o caracter do do vetor e recoloca os outros caracteres e redimenciona o vetor
{
int posicao;
printf("\nDigite a posicao: ");
fflush(stdin);
scanf("%i", &posicao);
if ( posicao <= tam)int k, x;
x = tam--;
for(k=posicao; k<tam+1; k++)*(*p+k) = *(*p+(k+1));
}
*p = (char*) realloc(*p, x* sizeof(char));
printf("Caractere excluido com sucesso");
}printf("Essa posicao não existe:");
}
printf("\n\nPressiona qualquer tecla para continuar");
getch();
}
void listar(char *p) //mostra o vetor existente
{
int k;
if(tam == 0)printf("\nNao há caracteres no vetor");
getch();
return;
}
printf("numero de caracteres no vetor e de %i:", tam);
for (k=0; k<=tam; k++)printf("\n\nposicao %i :%c: ",k ,*(p+k));
}
printf("\n\nPressiona qualquer tecla para continuar");
getch();
}
void limpar(char **p) //limpa o vetor
{
free(*p);
tam =0;
printf("\nVetor Limpo!!");
printf("\n\nPressiona qualquer tecla para continuar");
getch();
}Carregando comentários...