Gente to construindo uma trabalho para a faculdade e estou com o seguinte problema.
fiz um while para verificar se o há algum codigo repetido na lista. ok ta funcionando mas quando digito um numero que no caso não e repetido o programa da erro.
alguém pode dar uma ajuda.
segue a funcao adicionar.
void adicionar() {
ptrnovo=(struct prs*) malloc(sizeof(struct prs));
digitar();
int cont=1;
char codl[30];
if (ptrprim==(struct prs*)NULL)//testa se a lista esta vazia
{ ptrprim=ptrant=ptratual=ptrnovo;
ptratual -> ptrprox=(struct prs*) NULL; n++;
printf("\nInformacoes armazenadas com sucesso!!!");
}
else { //não é o primeiro codigo
// codl é quem recebe o codigo//
while(strcmp(ptratual->codl, ptrnovo -> codl)!=0){
ptrant=ptratual; ptratual=ptratual->ptrprox;
if(cont==n) break; cont++;}
if (strcmp(ptratual->codl, ptrnovo -> codl)==0)
printf("\nCodigo de Livro já cadastrado.\n");
if(cont==n+1){
int a=0,b=0,ordem=0,cont,i;
ptratual=ptrprim;
while(ordem==0) { //enquanto estiver fora de ordem
cont=0; i=0; //reinicia os contadores
while(cont==0) {
a=ptrnovo->codl[i]; b=ptratual->codl[i]; //alterei aqui 19-11 as 15:19
if(a-b==0) i++;
else cont=1; } //fim do while 2
if(cont==1) {
a=ptrnovo->codl[i]; b=ptratual->codl[i];
if(a>b) {
if(ptratual->ptrprox==(struct prs *)NULL) {
ptrnovo->ptrprox=(struct prs *)NULL; ptratual->ptrprox=ptrnovo; ordem=1; n++;}
ptrant=ptratual; ptratual=ptratual->ptrprox; }
if(a<b) {
if(ptratual==ptrprim) {ptrnovo->ptrprox=ptrprim; ptrprim=ptrnovo;}
else { if(ptratual->ptrprox==(struct prs *)NULL){
ptrnovo->ptrprox=ptrant->ptrprox; ptrant->ptrprox=ptrnovo;}
else {ptrnovo->ptrprox=ptratual; ptrant->ptrprox=ptrnovo;}}
/*fim if */
ordem=1; n++;}/*fim do else */
}//fim do if
else ptratual=ptratual->ptrprox; } //fim do while 1
printf("\nInformacoes armazenadas com sucesso!!!");
} //fim do else
}
getch(); } //fim da fun‡ao
Pergunta
Licenciatura Computacao
Boa tarde.
Gente to construindo uma trabalho para a faculdade e estou com o seguinte problema.
fiz um while para verificar se o há algum codigo repetido na lista. ok ta funcionando mas quando digito um numero que no caso não e repetido o programa da erro.
alguém pode dar uma ajuda.
segue a funcao adicionar.
void adicionar() { ptrnovo=(struct prs*) malloc(sizeof(struct prs)); digitar(); int cont=1; char codl[30]; if (ptrprim==(struct prs*)NULL)//testa se a lista esta vazia { ptrprim=ptrant=ptratual=ptrnovo; ptratual -> ptrprox=(struct prs*) NULL; n++; printf("\nInformacoes armazenadas com sucesso!!!"); } else { //não é o primeiro codigo // codl é quem recebe o codigo// while(strcmp(ptratual->codl, ptrnovo -> codl)!=0){ ptrant=ptratual; ptratual=ptratual->ptrprox; if(cont==n) break; cont++;} if (strcmp(ptratual->codl, ptrnovo -> codl)==0) printf("\nCodigo de Livro já cadastrado.\n"); if(cont==n+1){ int a=0,b=0,ordem=0,cont,i; ptratual=ptrprim; while(ordem==0) { //enquanto estiver fora de ordem cont=0; i=0; //reinicia os contadores while(cont==0) { a=ptrnovo->codl[i]; b=ptratual->codl[i]; //alterei aqui 19-11 as 15:19 if(a-b==0) i++; else cont=1; } //fim do while 2 if(cont==1) { a=ptrnovo->codl[i]; b=ptratual->codl[i]; if(a>b) { if(ptratual->ptrprox==(struct prs *)NULL) { ptrnovo->ptrprox=(struct prs *)NULL; ptratual->ptrprox=ptrnovo; ordem=1; n++;} ptrant=ptratual; ptratual=ptratual->ptrprox; } if(a<b) { if(ptratual==ptrprim) {ptrnovo->ptrprox=ptrprim; ptrprim=ptrnovo;} else { if(ptratual->ptrprox==(struct prs *)NULL){ ptrnovo->ptrprox=ptrant->ptrprox; ptrant->ptrprox=ptrnovo;} else {ptrnovo->ptrprox=ptratual; ptrant->ptrprox=ptrnovo;}} /*fim if */ ordem=1; n++;}/*fim do else */ }//fim do if else ptratual=ptratual->ptrprox; } //fim do while 1 printf("\nInformacoes armazenadas com sucesso!!!"); } //fim do else } getch(); } //fim da fun‡aoLink para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.