Ir ao conteúdo
  • Cadastre-se
Igor Vargas

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

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor Vargas    ele não está voltando por que tem um erro nessa linha aqui  :

}while(resp =! 'n');

onde você colocou o diferente ao contrário , então seria assim  :

}while(resp !='n');

 

  • Curtir 3

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo colocando if ele não funcionou. Não quero passar todo o código porque é meio extenso.

  • Curtir 1

Compartilhar este post


Link para o post
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 2
  • Amei 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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)   (!?)

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

         @giu_d Se ela digitar 127 e 135 ela não vai poder se inscrever pois as disciplinas tem os mesmos horários, ai retorna pra ela fazer a inscrição das disciplinas novamente.

  • Curtir 1

Compartilhar este post


Link para o post
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
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×