Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DanteStatic

Algoritmo não altera

Recommended Posts

Estou há três dias tentando resolver, mas até agora nada, a parte de alteração de registro, ao inves de alterar, apaga o dado armazenado, quem puder ajudar, agradeço desde já, valeu ai ^^

(eu ia colocar o algoritmo inteiro, mas ficaria muito extenso, ae optei deixar só a parte de alteração)

codaux = 0; i = 0; j = 0;
resp ='s';
resp2 ='s';
system("cls");
printf("|-----------------------------------------------------------------|\n");
printf("| SUB-ROTINA DE ALTERAÇÃO |\n");
printf("|-----------------------------------------------------------------|\n");
// Leitura e Processamento
if(v > 0) // Verifica se o vetor esta vazio
{
while((resp =='s'))
{
printf("\n Digite o código do nome que deseja alterar: ");
do
{
scanf("%d",&codaux);
}while(codaux <= 0);
j = 1; // j faz a verificação se há codigo cadastrado
while((codaux != vet_pes[j].cod) && (j <= 5)) // verificação de código existente,
j = j + 1; // até o limite de registros
if(codaux == vet_pes[j].cod)
{
printf(" O nome armazenado e: %s", vet_pes[j].nome); //exibe o nome armazenado
printf("\n Digite o novo nome: ");
do
{
scanf("%s",&nomeaux);
valnome=(strlen(nomeaux));
printf(" Deseja alterar o nome armazenado para %s ?",nomeaux); //confirma o nome lido
}while(valnome == 0);
printf("\n Confirma a alteração? (s/n) ");
while((resp=='s')&&(resp=='n'));
{
scanf("%s",&resp);
}
if(resp =='s')
{
vet.cod = codaux;
strcpy(vet_pes[j].nome, nomeaux); //strcmp não faz alteração
printf("\n Alteracao concluída!");
}
}
else
printf(" Código não cadastrado!");
printf("\n\n Deseja continuar alterando? (s/n) ");
do
{
scanf("%s",&resp);
}while((resp2!='s')&&(resp!='n'));
}
}
else
{
printf(" O vetor está vazio!");
printf("\n\n Pressione qualquer tecla para retornar ao menu!");
getch();
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bom dia DanteStatic, meu nome é joao e eu vou tentar te ajudar nesse problema. Como eu
n tenho o codigo inteiro vou tentar analizar o comportamento do codigo. Vou listar
algumas informações q eu creio q estao erradas, qualquer coisa depois você me corrige ;P
1:
/*
j = 1;
while((codaux != vet_pes[j].cod) && (j <= 5))
j = j + 1;
*/
Primeiro: "j=1" faz com a pessoa do vetor 0 nunca seja comparada com o codaux
Segundo: Se o vetor tem 6 pessoas ta tdo certo, mas se tiver 5 você esta testando o
vet_pessoas[5] e isso n existe.
2:
/*
scanf("%s",&nomeaux);
*/
Supondo que nomeaux foi instanciado de umas das seguintes maneiras:
char* nomeaux;
char nomeaux[];
nomeaux sem um indice[], é um endereço de memoria, e scanf espera receber um endereço
de memoria, logo você colocar &nomeaux seria equivalente a:
int i = 0;
scanf("%d", &&i);//so pra intende oq eu quis dizer
3? vet.cod = codaux; n intendi pq você usou o i e nao o j
4:
/*
scanf("%s",&resp);
*/
resp é um char, apesar nao acusar erros, pode gerar problemas sutis com este tipo de
coisa
5:
/*
while((resp=='s')&&(resp=='n'));
{
scanf("%s",&resp);
}
*/
Este seu while nao faz sentido algum, em q situação q o char resp vai ser 's' e 'n' ao msmo tempo
acreditando que a sua intenção é evitar do usuario digitar algo diferente de s e n, o codigo foi
alterado.
6:
listaPessoas->pessoa[j].cod = codaux;
Nao intendi o pq dessa linha, entao só comentei
Para simular a alteração q você queria eu fiz um codigo de registro, acho q era mais
ou menos isso q você tinha. Copia cola e executa. Espero te ajudado, qualquer coisa da um grito aew denovo. =D

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 50
#define QNTPESSOAS 5

typedef struct
{
	char* nome;
	int cod;
}td_Pessoa;

typedef struct
{
	int quantidade;
	td_Pessoa* pessoa;
}td_Lista;

td_Lista* CriaLista(int quantidade);
void IniciaLista(td_Lista*);
void MostraLista(td_Lista*);

int main()
{
	td_Lista* listaPessoas = CriaLista(QNTPESSOAS);
	IniciaLista(listaPessoas);
	
	//AKI COMEÇA O SEU CODIGO
	int codaux = 0, i = 0, j = 0, valnome = 0;
	char resp ='s'; 
	char resp2 ='s';
	
	char nomeaux[MAX];
	
	printf("|-----------------------------------------------------------------|\n");
	printf("|                SUB-ROTINA DE ALTERAÇÃO                |\n");
	printf("|-----------------------------------------------------------------|\n");
	
	while(resp == 's')
	{
		MostraLista(listaPessoas);//So para demonstrar q esta funcionando
		
		printf("\n Digite o código do nome que deseja alterar: ");
		do
		{
			scanf("%d",&codaux);
		}while(codaux < 0);//tirei o igual
 
		//ALTERADO
		j=0;
		while((codaux != listaPessoas->pessoa[j].cod) && (j < QNTPESSOAS))  
			j++;
		//
		
		if(codaux == listaPessoas->pessoa[j].cod)
		{
			printf(" O nome armazenado e: %s", listaPessoas->pessoa[j].nome); //exibe o nome armazenado
			printf("\n Digite o novo nome: ");
			do
			{
				scanf("%s", nomeaux); //ALTERADO	
				valnome=(strlen(nomeaux));
				printf(" Deseja alterar o nome armazenado para %s?", nomeaux); //confirma o nome lido
			}while(valnome == 0);
			
			printf("\n Confirma a alteração? (s/n) ");
			do
			{
				scanf("%c", &resp);//ALTERADO	
			}while((resp!='s')&&(resp!='n'));//ALTERADO	

			if(resp == 's')
			{
				//listaPessoas->pessoa[j].cod = codaux;
				strcpy(listaPessoas->pessoa[j].nome, nomeaux); //strcmp não faz alteração
				printf("\n Alteracao concluída!");
			}
		}
		else
			printf(" Código não cadastrado!");
		 
		printf("\n\n Deseja continuar alterando? (s/n) ");
		do
		{
			scanf("%s",&resp);
		}while((resp2!='s')&&(resp!='n'));
		//O else daki é dakele 'v' q eu nao se de onde é
	}
	//AKI TERMINA O SEU CODIGO
	
	return 0;
}


void MostraLista(td_Lista* lista)
{
	int i = 0;
	
	printf("Nome\t\t|Cod\n");
	for(i = 0; i < lista->quantidade; i++)
		printf("%s\t\t|%d\n", lista->pessoa[i].nome, lista->pessoa[i].cod);
}

void IniciaLista(td_Lista* lista)
{
	int i = 0;
	char* nomes[] = {"Joao", "Maria", "Pedro", "Jose", "Paulo"};//gambiarra

	while(i < lista->quantidade)
	{
		lista->pessoa[i].cod = i;
		strcpy(lista->pessoa[i++].nome, nomes[i]);
	}
}

td_Lista* CriaLista(int quantidade)
{
	int i = 0;
	td_Lista* res = (td_Lista*)malloc(sizeof(td_Lista));
	res->quantidade = quantidade;
	res->pessoa = (td_Pessoa*)malloc(sizeof(td_Pessoa) * quantidade);
	
	while(i < quantidade)
		res->pessoa[i++].nome = (char*)malloc(sizeof(char) * MAX);
	
	return res;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.