Ir ao conteúdo
  • Cadastre-se
Wesleysh8

Não funciona a opção ''sim ou não'' em char!!

Recommended Posts

Olá pessoal, estou fazendo um programa que consta o seguinte objetivo, que seria fazer um cadastro de alunos. Eu tenho que fazer um menu para esses cadastros, e na primeira opção do menu que seria ''Cadastrar Aluno'', eu tenho que cadastrar no máximo 20 alunos e escolher o curso de cada um, e logo após o programa terá que perguntar para o usuário se ele deseja cadastrar mais um aluno, se ''sim ou não', é nessa parte que eu não estou conseguindo, quando eu escolho ''não'' o programa continua cadastrando os alunos, o que eu faço para poder corrigir isso e fazer com o que o programa pare de cadastrar quando eu desejar??

 

SEGUE A PROGRAMAÇÃO:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

 

//Controle
int tela = 0;
int aluno = 0;
int cont = 0;
int l = 1;
int armaz = 0;

 

//Armazenamento de dados
char nomes[20][15];
int cursos[20];
float notasGA[20];
float notasGB[20];
char y[1];


void Relatorios(){    
    //Nome
    printf("Nome: %s \n", nomes[aluno]);
    
    //Curso
    if(cursos[aluno] == 1){
        printf("Curso: Engenharia Computacao\n");
    }    
    if(cursos[aluno] == 2){
        printf("Curso: Engenharia Civil\n");
    }
    
    //Notas
    printf("Nota GA: %f \n", notasGA[aluno]);
    printf("Nota GB: %f \n", notasGB[aluno]);
}

void DigitarNotas(){
    

}

 

//Cadastrar Aluno
void CadastroAluno(){
    do{    
        printf("Digite o nome do aluno %d: \n", l++);
        scanf("%s", &nomes[aluno]);
    
        printf("Escolha o curso do aluno: \n 1 - Engenharia de Computacao \n 2 - Engenharia Civil \n");
        scanf("%d", &cursos[aluno]);
        if(cursos[aluno] == 1){
            printf("Engenharia de Computacao \n");
        }
    
        if(cursos[aluno] == 2){
            printf("Engenharia Civil \n");
        }
    
        printf("Deseja cadastrar mais um aluno? (s/n)");
        scanf(" %c", &y);
        
        system("cls");
    }while((y != 'n') && (y != 'N'));
    armaz++;
    cont = cont + 1;    

 

}

void MenuPrincipal(){
    while(tela != 4){
        printf("CADASTRO DE ALUNOS E NOTAS - MENU PRINCIPAL\n");
        printf("Por favor, selecione uma opcao: \n ");
        printf("1 - Cadastrar Aluno \n");
        printf(" 2 - Digitar Notas \n");
        printf(" 3 - Relatorios \n");
        printf(" 4 - Sair \n");
        scanf("%d", &tela);
        
        system("cls");
        
        switch(tela){
            case 1:
                CadastroAluno();
            break;
                
            case 2:
                DigitarNotas();
            break;
            
            case 3:
                Relatorios();
            break;
            
        }        
    }

}

int main(int argc, char *argv[]) {
    MenuPrincipal();    
    return 0;
}

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não lhe é possível armazenar um string "sim" em eu char, se tentar a única letra que vai ser guardada será 's', o resto permanecerá no buffer e será liberada na seguinte vez que encontrar um scanf com outra char ou string, podendo causar falhos no seu programa. Ou você usa uma letra 's' para "sim" e 'n' para "não", ou você usa uma string conjuntamente com a função strcmp para comparar.

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

×