jholxd
Membros-
Total de itens
4 -
Registro em
-
Última visita
Sobre jholxd
jholxd's Achievements
0
Reputação
-
Então eu dei uma arrumada no código está agora tudo funcionando só uma coisa não consegui fazer quando eu seleciono a opção 1 e insiro um caracter e ele sempre coloca + 1 espaço vazio do vetor e eu não queria isso alguém sabe resolver isso? obs: nas opções que eu altero o tamanho do vetor eu devo manter ponteiro para ponteiro né ? segue o código: #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; char *ptr= NULL; //a primeira vez que passa o ponteiro na função deve ser nula 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 '1': inserir(&ptr); break; case '2': inserirp(&ptr); break; case '3': alterarp(&ptr); break; case '4': excluirp(&ptr); break; case '5': listar(&ptr); break; case '6': limpar(&ptr); break; case '7': { printf("\n\nDeseja realmente sair?"); fflush(stdin); scanf("%c", &opcao); } break; default: { 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) { int k=0; char caractere; printf("%i", k); k = tam++; //incrementa tam e insere em k *p = (char*) realloc(*p, k* sizeof(char)); //p = tipo realloc(ponteiro, (tamanho original + 1) definindo o tamanho da variavel) printf("%i", k); printf("\nDe o caractere: "); fflush(stdin); scanf("%c", &caractere); //não 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) { 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); } else { 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) { 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"); } else { printf("Essa posicao não existe:"); } printf("\n\nPressiona qualquer tecla para continuar"); getch(); } void excluirp(char **p) { 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"); } else { printf("Essa posicao não existe:"); } printf("\n\nPressiona qualquer tecla para continuar"); getch(); } void listar(char **p) { 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) { free(*p); tam =0; printf("\nVetor Limpo!!"); printf("\n\nPressiona qualquer tecla para continuar"); getch(); } desculpe o código estar mal comentado mas eu não sei o q comentar, vou tirar alguns ponteiros de ponteiros que eu acho que não é necessário e comentar o que cada função faz para ver se melhoro o entendimento do código.
-
Eu vi aki alguns erros de sintaxe e minha váriavel global não estava incrementando mas agora na minha função lista não lista o primeiro elemento do meu vetor que é expandido dinamicamente. #include <stdio.h> #include <stdlib.h> #include <string.h> int tam=0; char inserir(char**p); char inserirp(char **p); char alterarp(char **p); char excluirp(char **p); char listar(char **p); char limpar(char **p); int main() { char opcao; char op; char *ptr= NULL; //a primeira vez que passa o ponteiro na função deve ser nula //ptr = (char*) realloc(NULL, tam* sizeof(char)); 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\n\n"); fflush(stdin); scanf("\n\n%c", &op); switch(op) { case '1': inserir(&ptr); break; case '2': inserirp(&ptr); break; case '3': alterarp(&ptr); break; case '4': excluirp(&ptr); break; case '5': listar(&ptr); break; case '6': limpar(&ptr); break; default: printf("Não existe a opcao"); getch(); } system("cls"); printf("Deseja continuar?"); fflush(stdin); scanf("%c", &opcao); } while(opcao =='s'); return 0; getch(); } char inserir(char **p) { int k; char caractere; k = ++tam; //incrementa tam e insere em k *p = (int*) realloc(*p, k* sizeof(int)); //p = tipo realloc(ponteiro, (tamanho original + 1) definindo o tamanho da variavel) printf("\nDe o caractere: "); fflush(stdin); scanf("%c", &caractere); //não ESQUECER DO & NO SCANF NA VÁRIAVEL QUE você ESTA RECEBENDO POR QUE você ESTA RECEBENDO O COMEÇO *(*p+k) = caractere; printf("%c", caractere); printf("\n\n%c", *(*p+k)); getch(); return 0; } char inserirp(char **p) { 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; } else { k = (posicao - tam) + tam; *p = (int*) realloc(*p, k* sizeof(int)); *(*p+posicao) = caracter; } getch(); } char alterarp(char **p) { 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; } else { printf("Essa posicao não existe:"); } getch(); } char excluirp(char **p) { int posicao; printf("\nDigite a posicao: "); fflush(stdin); scanf("%i", &posicao); if ( posicao <= tam) { *(*p+posicao) = 0; } else { printf("Essa posicao não existe:"); } getch(); } char listar(char **p) { int k; printf("%i", tam); for (k=0; k<tam; k++) { printf("posicao %i :%c: ",k ,*(*p+k)); } getch(); } char limpar(char **p) { free(*p); getch(); }
-
o meu vetor eu quero que seja digamos justo tipo para cada caractere que eu colocar eu aumento o vetor e se indico uma posição maior que o tamanho que eu tenho eu aumento o vetor até aquela posição.
-
Olá amigos eu estou fazendo um programa aqui ele compila certinho só que quando eu vou inserir um caratere no vetor ele da erro no programa e fecha. eu não sei c para receber o ponteiro de ponteiro dentro da função eu tenho que especificar o **p segue o código inteiro abaixo #include <stdio.h> #include <stdlib.h> int tam=0; char inserir(char**p); char inserirp(char **p); char alterarp(char **p); char excluirp(char **p); char listar(char **p); char limpar(char **p); int main() { char opcao; char op; char *ptr; ptr = (char*) realloc(NULL, 1* sizeof(char)); 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\n\n"); fflush(stdin); scanf("\n\n%c", &op); switch(op) { case '1': inserir(&ptr); break; case '2': inserirp(&ptr); break; case '3': alterarp(&ptr); break; case '4': excluirp(&ptr); break; case '5': listar(&ptr); break; case '6': limpar(&ptr); break; default: printf("Não existe a opcao"); getch(); } system("cls"); printf("Deseja continuar?"); fflush(stdin); scanf("%c", &opcao); } while(opcao =='s'); return 0; getch(); } char inserir(char **p) { int k; char caractere; k = tam + 1; **p = (int*) realloc(**p, k* sizeof(int)); //p = tipo realloc(ponteiro, (tamanho original + 1) definindo o tamanho da variavel) printf("\nDe o caractere: "); fflush(stdin); scanf("%c", caractere); **(p+k) = caractere; return 0; } char inserirp(char **p) { 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; } else { k = (posicao - tam) + tam; **p = (int*) realloc(**p, k* sizeof(int)); **(p+posicao) = caracter; } } char alterarp(char **p) { 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; } else { printf("Essa posicao não existe:"); } } char excluirp(char **p) { int posicao; printf("\nDigite a posicao: "); fflush(stdin); scanf("%i", posicao); if ( posicao <= tam) { **(p+posicao) = 0; } else { printf("Essa posicao não existe:"); } } char listar(char **p) { int k; for (k=1; k<tam; k++) { printf(":%c: ",**(p+k)); } return 0; } char limpar(char **p) { free(p); return 0; }