Ir para conteúdo
Fórum Script Brasil

jholxd

Membros
  • Total de itens

    4
  • Registro em

  • Última visita

Sobre jholxd

jholxd's Achievements

0

Reputação

  1. 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.
  2. 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(); }
  3. 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.
  4. 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; }
×
×
  • Criar Novo...