Ir ao conteúdo
  • Cadastre-se

C Meu laço não reconhece o meu if


Igor Vargas

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

 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
Link para o comentário
Compartilhar em outros sites

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