Ir ao conteúdo
  • Cadastre-se

C Struct não quer atualizar o indice.


Kzeshine

Posts recomendados

Alguém sabe me responder por que na terceira opção de "Banco de dados dos funcionários" na também terceira opção do menu de "Alterar os dados de um funcionários" quando vou alterar o número do usuário acima do 1 ele não faz a alteração?
 

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<locale.h>
#include<string.h>

#define tam 2
#define mtam 10

int qtdfuncionario = 0;
int qtdmercadoria = 0;
int Mercado = 0;

struct Mercado{
	
	int nFuncionario, estoque;
	char nome[30], item[50], cpf[11];
	float valor, peso;
};

// 
// Aqui os files
//

struct Mercado Smercado[tam];


void op1(int i);
void op2();
void op3();
void op4();
void op5();

int main (void){
	
	int menu1, x;
	
	setlocale(LC_ALL, "Portuguese");
	
	char pause = 'n';
	while(pause == 'n'){
	
	printf("				>>Supermercado<<				\n\n");
	printf("Digite (1) para Cadastrar os funcionários. ");
	printf("\nDigite (2) para Cadastrar uma mercadoria. ");
	printf("\nDigite (3) para Banco de dados dos funcionários. ");
	printf("\nDigite (4) para Banco de dados das mercadorias. ");
	printf("\nDigite (3) para Sair\n");
	scanf("%i", &menu1);
	
		switch(menu1){
				case 1: 
						if(qtdfuncionario < tam){
							op1(qtdfuncionario);
						}else {
							printf("Quantidade maxima de funcionários. ");
							system("pause");
							system("cls");
						}
						break;
						
						case 2:
							if(qtdmercadoria < mtam ){
								op2();
							}else {
								printf("Quantidade maxima de mercadoria cadastrada. ");
								system("pause");
								system("cls");
							}
							break;

						case 3:
							if(qtdfuncionario){
								op3();
							}else {
								printf("Nenhum funcionário registrado. ");
								system("pause");
								system("cls");
							}
							break;
		
						case 4:
							if(qtdmercadoria){
								op4();
							}else {
								printf("Quantidade maxima de mercadoria cadastrada. ");
								system("pause");
								system("cls");
							}
							break;		
												
						case 5:
								pause = 's';
							break;
								
				default:
				printf("Opção inválida. por favor tente novamente.");
				system("pause");
				system("cls");			
		}
	}
	printf("Programa finalizado!");
}

void op1(int i){

    system("cls");
    printf("            >>Cadastro de funcionários<<            \n\n");
    printf("Digite o nome do funcionário: ");
    scanf("%s", &Smercado[i].nome);
    
	while(1){
    printf("Digite o número do funcionário: ");
    scanf("%i", &Smercado[i].nFuncionario);
    
    if((Smercado[i].nFuncionario < 1) || (Smercado[i].nFuncionario > 20))
    	printf("\nOs números para registro são somente de 1 a 20. (POR ENQUANTO ESTÁ SO 2)\n");
    	
    	else
    	break;
	}
    
	while (2){
    printf("Digite o CPF do funcionário: ");
    scanf("%s", &Smercado[i].cpf);

    system("cls");
    if(strlen (Smercado[i].cpf) != 11)
        printf("\n\t\tCPF inválido ou não contém os 11 números. \n\t\tPorfavor digite novamente.\n\n");
        
        else
        break;
    }
    
    qtdfuncionario++;
            
}

void op2(){		//Digite (2) para Cadastrar uma mercadoria. 
	
	int i;
	char RESPOSTA, s, n; // s = Sim, n = Não
	
	system("cls");
	printf("			>>Cadastro de Mercadoria<<			\n\n");
	printf("Digite o nome do Item: ");
	scanf("%s", &Smercado[i].item);
	printf("Digite a quantia no Estoque: ");
	scanf("%i", &Smercado[i].estoque);
	printf("Você deseja adicionar peso ao produto? (Digite 1 para Sim e 2 para Não) "); //Não consegui colocar em char 's' para sim e 'n' para não.
		scanf("%i", &RESPOSTA);
	if (RESPOSTA == 1 ){
		printf("Digite o Peso do Item: ");
		scanf("%f", &Smercado[i].peso);
		printf("Digite o Valor do produto: ");
		scanf("%f", &Smercado[i].valor);
	} else if (RESPOSTA == 2){
		printf("Digite o valor do produto: ");
		scanf("%f", &Smercado[i].valor);
	}
	system("cls");
	qtdmercadoria++;

}

void op3(){
	

	int i, menu, recb = 0, lista_nFuncionario;
	char pauseop3, RESP[3];
	
	recb = qtdfuncionario;
	
	system("cls");
	printf("				>>Registro de Funcionários<<				\n\n");
	printf("Digite (1) para visualizar o número total de funcionários cadastrados. ");
	printf("\nDigite (2) para visualizar o nome e seus números de cadastro. ");
	printf("\nDigite (3) para alterar os dados de um funcionário. ");
	printf("\nDigite (4) para excluir o registro de um ou de todos os funcionários. \n");
	scanf("%i", &menu);
	
	switch(menu){
		case 1: // Total de funcionários trabalhando
			printf("Total de funcionários: %i\n", recb);
			break;
		
		case 2: // Visualizar os seus números de cadastro e nome
			printf("\n\t Funcionários:\n");
			for(i=0; i<qtdfuncionario; i++){
			printf("\n %i - %s ",i, Smercado[i].nome);	
			}
			break;
		case 3: // Registro de cadastro - Alterar
		system("cls");
		if(!qtdfuncionario){
			printf("Não existe nenhum funcionário cadastrado");
		}else{
				printf("\n\t\t\t       >> Clientes cadastrados <<       \n");
				printf("\t                                    \n");
				
				for(i=0; i<qtdfuncionario; i++){
					printf("\t\t|  Nº  |		Nome		|	    CPF		|\n");
					printf("\t\t|  %02i  | %s				|	%s	|\n", Smercado[i].nFuncionario, Smercado[i].nome, Smercado[i].cpf);
				}
				
				printf("\nInforme qual cliente deseja alterar: ");
				scanf("%i", &i);
				i--;
          
				printf("Digite o nome do funcionário: ");
    			scanf("%s", &Smercado[i].nome);
    			printf("Digite o número do funcionário: ");
    			scanf("%i", &Smercado[i].nFuncionario);
    
				while (1){
    			printf("Digite o CPF do funcionário: ");
    			scanf("%s", &Smercado[i].cpf);

 			    system("cls");
   				if(strlen (Smercado[i].cpf) != 11)
  		        printf("\n\t\tCPF inválido ou não contém os 11 números. \n\t\tPorfavor digite novamente.\n\n");
        
        else
        break;
   			}
		}
	}
}

void op4(){
	
}

Sabendo que: (Não sei porque)

1 = 0
2 = 1

3 = 2

...
Eu coloquei "i--;" pra sempre diminuir 1. Se eu não colocar ele não altera nem o 1 número.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Kzeshine    essa questão de colocar menos hum é porque os vetores começam em zero , então se digitar para alterar o primeiro ( 1 ) cliente , esse cliente na verdade está guardado na posição zero do vetor e se você gravar na posição digitada ele vai gravar na posição hum mesmo que não será a verdadeira posição , e testei aqui mas ele está sim modificando os dados do cliente , teste pedindo para visualizar o nome do cliente depois de modifica-lo , e ele está certo  .

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!