Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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');
    
        }    
    

 

Editado por Igor Vargas
  • 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.

Editado por Igor Vargas
  • 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;
    }
}

 

Editado por devair1010
  • 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

Editado por giu_d
corrigir comentário
  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi não estava percebendo isso, Obrigado pela ajuda de todos.

  • Curtir 2
  • Amei 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






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

×