Ir ao conteúdo

Posts recomendados

Postado

Estou com uma duvida na minha função onde meu laço nao esta reconhecendo meu if e não esta fazendo a volta para o scanf("%d",&al[x]l._Disciplinas) . Colocarei só a função.

Meus dois do while não estão funcionando.

 

void add_Aluno(struct registro al[3], struct disciplinas add_Dis[5], struct grade g_Materias[20][5]){
    int dis,x,y,guarda[5],cont=0,num;
    char resp;
    int volta;
    printf("\n\n");
    printf("--------------------------------------\n");
    printf("---voce selecionou adicionar aluno.---\n");
    printf("--------------------------------------\n");
    printf("    Lista de Disciplinas\n");
    printf("    Codigo    Nome\n\n");
    for(x=0; x<5; x++){
    printf("    %d     %s \n",add_Dis[x].codigo,add_Dis[x].nome);
    }
    printf("\n");
        
    do{
        printf("Digite seu nome:");
        fflush(stdin);							//Funcão de Cadastro do aluno
        gets(al[cont].nome);
        printf("Digite seu Sobrenome:");
        gets(al[cont].sobrenome);
        strcat(al[cont].nome, al[cont].sobrenome);
        printf("Digite sua Matricula:");
        scanf("%d",&al[cont].matricula);
        printf("Digite seu e-mail:");
        fflush(stdin);
        gets(al[cont].email);
        cont++;
        volta=1;	
        printf("Digite em quantas materias deseja se matricular:");
        scanf("%d",&num);	
        printf("Digite o codigo das diciplinas que voce deseja se matricular\n");
        do{
		for(y=0; y<num; y++){	
        scanf("%d",&al[y].l_Disciplinas);
        volta=1;
}
    for(x=0; x<num; x++){
        if(al[x].l_Disciplinas==122)								
		//Adiciona as disciplinas para as posiçoes
        //da matriz
        {
        
            strcpy(g_Materias[0][0].grade_C,"Algo");
            strcpy(g_Materias[1][1].grade_C,"Algo");
        }
        else if(al[x].l_Disciplinas==127)
        {
        
            strcpy(g_Materias[2][1].grade_C,"Estr");
            strcpy(g_Materias[4][2].grade_C,"Estr");
           
        }
        else if(al[x].l_Disciplinas==132)
        {
        	     
            strcpy(g_Materias[2][1].grade_C,"Sist");
            strcpy(g_Materias[1][3].grade_C,"Sist");
           
        }
        else if(al[x].l_Disciplinas==143)
        {
        	    
            strcpy(g_Materias[1][4].grade_C,"Padr");
		            
        }
        else if(al[x].l_Disciplinas==135)
        {
        
            strcpy(g_Materias[1][2].grade_C,"Banc");
            strcpy(g_Materias[1][4].grade_C,"Banc");
        
        }
        else if((al[x].l_Disciplinas == 127 && al[x].l_Disciplinas == 132 )|| al[x].l_Disciplinas ==135 && al[x].l_Disciplinas == 143)
		{
		printf("voce Não pode se inscrever em duas disciplas de mesmo horario\n");	
		volta=0;	
		al[y].l_Disciplinas=0;			
		}
        
		}
    
	}while(volta == 0 );
    printf("Deseja Cadastrar outro aluno? s/n:");
    fflush(stdin);
    scanf("%c",&resp);
}while(resp =! 'n');
    
        }    
    

 

  • Curtir 1
Postado

@devair1010 nossa não tinha visto isso. Mas o meu outro do while parece q não esta reconhecendo essa condição

 

else if((al[x].l_Disciplinas == 127 && al[x].l_Disciplinas == 132 )|| al[x].l_Disciplinas ==135 && al[x].l_Disciplinas == 143)
		{
		printf("voce Não pode se inscrever em duas disciplas de mesmo horario\n");	
		volta=0;	
		al[y].l_Disciplinas=0;			
		}
        
		}

 

 

  • Amei 1
Postado

@Igor Vargas Olá. Nessa condição você está usando o operador &&. Nesse caso, para a condição ser verdadeira, a pessoa deve estar inscrita ou nas disciplinas 127 e 132 ao mesmo tempo ou nas disciplinas 135 e 143

Postado

@Igor Vargas     sim , ele está funcionando normal , pois se volta igual zero ele repete .  o que está acontecendo é que ele não está entrando no último else if  ,  pois ele entra em um dos primeiros if .  então coloque esse último if sem o else .

  • Curtir 1
Postado
4 horas atrás, Igor Vargas disse:

(al[x].l_Disciplinas == 127 && al[x].l_Disciplinas == 132 )|| al[x].l_Disciplinas ==135 && al[x].l_Disciplinas == 143

Isso nunca será verdadeiro...

 

É impossível um número ser igual a 127 e a 132 ao mesmo tempo.

Também é impossível um número ser igual a 135 e a 143 ao mesmo tempo.

  • Curtir 1
  • Amei 1
Postado
 printf("Digite em quantas materias deseja se matricular:");
        scanf("%d",&num);	
        printf("Digite o codigo das diciplinas que voce deseja se matricular\n");
        do{
		for(y=0; y<num; y++){	
        scanf("%d",&al[y].l_Disciplinas);
        volta=1;

Digamos q ele digite o numero dois no primeiro scanf. Ai no segundo scanf vai digitar 127 e 132 ou135 e143 se for isso q ele digitar, vai ser verdadeiro, pois só vai ser falso se não for umas das 2 opções pelo menos foi essa lógica q eu utilizei posso estar errado. @isrnick

adicionado 8 minutos depois

 A minha struct é essa. Sera que o int l_Dsciplinas não deveria ser um vetor ? pois são 5 disciplinas, mas no caso o aluno escolhe em quantas deseja se matricular. Sendo assim acho que o if funcionária.

struct registro
    {
        
    int matricula;
    char nome[20];
    char sobrenome[20];
    char email[40];
    int l_Disciplinas;
        
    };

 

  • Curtir 1
Postado

@Igor Vargas Me parece q a condição está incompleta. Do modo como você fez, e se a pessoa digitar 127 e 135? Ela está se inscrevendo em dois cursos, só q nesse caso a condição vai retornar 0 (false)   (!?)

Postado

@Igor Vargas     o que o @isrnick   disse é que uma variável não pode ter dois valores ao mesmo tempo , pois aqui você colocou

if((al[x].l_Disciplinas == 127 && al[x].l_Disciplinas == 132 )|| al[x].l_Disciplinas ==135 && al[x].l_Disciplinas == 143)
  
que seria assim 
if((al[0].l_Disciplinas == 127 && al[0].l_Disciplinas == 132 )|| al[0].l_Disciplinas ==135 && al[0].l_Disciplinas == 143)

o vetor na mesma posição ,  então para verificar se o número já foi digitado antes você precisa verificar todos os números que estão no vetor , e para isso precisa de outro laço de repetição ,  que poderia ser assim  :

for(j=0;j<num;j++){
    if((al[x].l_Disciplinas == 127 && al[j].l_Disciplinas == 132 && j != x )|| al[x].l_Disciplinas ==135 && al[j].l_Disciplinas == 143 && j != x)
    {
        printf("voce Não pode se inscrever em duas disciplas de mesmo horario\n");
        volta=0;
        al[y].l_Disciplinas=0;
        break;
    }
}

 

  • Curtir 1
Postado

@devair1010 Exato. Na condição x vai estar valendo ou 0, ou 1... o mesmo índice. Seria algo como comparar (a == 45 && a == 56) || (a == 77 && a == 80)

O q o @isrnick disse está correto

adicionado 4 minutos depois

Você apontou uma solução: Alterando os índices

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!