Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MichelleAraujo

Erro em char, fazendo com que nao saia do loop

Recommended Posts

Olá pessoal, tudo beleza?
Estou aqui com um pequenino problema: meu menu não está funcionando quando vai inserir novamente qualquer outra opcao. Na primeira vez tudo dá certo, mas quando dá o loop pra inserir novamente a opcao 1, ele volta pedindo a opcao 1. Dei um print aqui na variavel op1 só aparece espaço. Não posso colocar um case '\n' porque vou ter q pedir para o usuario digitar novamente a opcao 1 e não é isso que eu quero. Coloquei logo no inicio, antes de inserir o op1 (e inicializando também) op1='\0', mas não adianta, continua os mesmos espaços. Já fiz de tudo aqui, quem puder dar uma luz, faz parte de um trabalho q vou entregar sexta. Agradeço desde já.

 

int main(void) {
	Alunos*lAlunos=criaAlunos();
	Notas*lNotas=criaNotas();
	Disciplinas*lDisci=criaDisciplinas();
	Cursos*lCursos=criaCursos();
	Sexo*lSexo=criaLSexo(); lSexo=criaSexo(lSexo);
	char op1='\0', op2, op3, op4;
	do {
		op1='\0'; puts("Opcao 1:"); scanf("%c%*c",&op1);
		printf("%c\n",op1);
		switch (op1){
			case 'i': puts("Opcao 2:"); scanf("%c",&op2); switch (op2){
				case 'a': inserindoAlunos(lAlunos); break;
				case 'd': inserindoDisciplinas(lDisci); break;
				case 'c': inserindoCursos(lCursos); break;
				case 'n': inserindoNotas(lNotas,lAlunos,lDisci,lCursos,lSexo); break;
				}
				break;
			case 'm': puts("Opcao 2:"); scanf("%c%*c",&op3); switch (op3) {
				case 'a': ConsultaMAluno(lAlunos); break;
				case 'd': ConsultaMDisciplina(lDisci); break;
				case 'c': ConsultaMCurso(lCursos); break;
				case 's': ConsultaMSexo(lSexo); break;
				case 't': MediaNota(lNotas); break;
				}
				break;
			case 'n': ConsultaNAluno(lAlunos,lDisci); break;
			case 'l': puts("Opcao 2:"); scanf("%c%*c",&op4); switch (op4) {
				case 'a': printAlunos(lAlunos); break;
				case 'd': printDisciplinas(lDisci); break;
				case 'c': printCursos(lCursos); break;
				}
				break;
			case 'r': removendoNotas(lAlunos,lDisci,lCursos,lSexo,lNotas); break;
		}
	} while (op1!='e');
	return 0;
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

MichelleAraujo,

 

Tente explicar um pouco melhor o que você deseja que aconteça e o que acontece de fato. Ficou confuso.

 

Quanto ao código, de vista, parece estar correto. Mas sem compilar, não tenho certeza.

 

Verifique esta linha:

case 'i': puts("Opcao 2:"); scanf("%c",&op2); switch (op2){

Ignore aqui também a quebra de linha quando utiliza o scanf.

scanf("%c%*c",&op2);

 

Espero ter ajudado, FLW!

Compartilhar este post


Link para o post
Compartilhar em outros sites

GBecker,

 

Desculpa se você não entendeu, é pq já tava com sono e desesperada porque já tinha tentado de várias maneiras e não conseguia. :dormindo:

Vamos interpretar os fatos:
Tenho um menu que lê a op1 e, dentro desse menu, em alguns casos, tem outros menus. O que está acontecendo é: quando executo o programa pela primeira vez, ele pede para digitar a Opcao 1, digito i, e depois a e funciona normalmente. Então ele volta para pedir a Opcao 1 e é nesse ponto que começa o problema, ou seja, quando vou digitar pela 2ª vez a opção 1. Insiro a opção i (ou qualquer outra opcao) e não responde, continua me pedindo a Opcao 1. Então fiz para o programa mostrar o que tinha na variavel op1 e aparece espaços. Ele só volta a normalidade quando eu digito enter, sem digitar nenhum cactere, me pede novamente a Opcao 1 e quando insiro ele age normalmente. Vou simular um terminal aqui para mostrar:

 

Opcao 1:
i
i             //pedi para printar o que tinha na variavel op1
Opcao 2:
a
Nome aluno:
fulano
Opcao 1:
i            // é aqui que falha, não sai de opcao 1 e quando printa o que tem
             // em op1 só aparece espaços


Opcao 1:
i



Opcao 1: 
            //nessa parte eu digito <enter>

Opcao 1:    // e depois q digito <enter> ele volta ao normal o.O
i
Opcao 2:
a
Nome aluno:
sicrano
Opcao 1:

 

É isso o q acontece no programa. Acho que agora ficou mais claro :kiss:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi meu problema: no inicio, coloquei logo depois do scanf um getchar(), mas nesse caso tinha apertar <enter> para depois ele ir para o proxima opção. Então, o que fiz? Criei uma variavel para armazenar o getchar() e em todo o meu programa substitui os scanfs por gets, com excessão no que mostro abaixo, porque nesse caso é só o int main. Mesmo assim, muito obrigada.

 

Alunos*lAlunos=criaAlunos();
	Notas*lNotas=criaNotas();
	Disciplinas*lDisci=criaDisciplinas();
	Cursos*lCursos=criaCursos();
	Sexo*lSexo=criaLSexo(); lSexo=criaSexo(lSexo);
	char op1, op2, op3, op4, op;
	do {
		puts("Opcao 1:"); scanf("%c",&op1); op=getchar();
		switch (op1){
			case 'i': puts("Opcao 2:"); scanf("%c",&op2); getchar(); switch (op2){
				case 'a': lAlunos=insereAlunos(lAlunos); printf("\e[H\e[2J"); break;
				case 'd': lDisci=insereDisciplinas(lDisci); printf("\e[H\e[2J"); break;
				case 'c': lCursos=insereCursos(lCursos); printf("\e[H\e[2J"); break;
				case 'n': lNotas=insereNotas(lAlunos,lDisci,lCursos,lSexo,lNotas); printf("\e[H\e[2J"); break;
				}
				break;
			case 'm': puts("Opcao 2:"); scanf("%c",&op3); getchar(); switch (op3) {
				case 'a': ConsultaMAluno(lAlunos); break;
				case 'd': ConsultaMDisciplina(lDisci); break;
				case 'c': ConsultaMCurso(lCursos); break;
				case 's': ConsultaMSexo(lSexo); break;
				case 't': MediaNota(lNotas); break;
				}
				break;
			case 'n': NotaAlunoDisci(lAlunos,lDisci); break;
			case 'l': puts("Opcao 2:"); scanf("%c",&op4); getchar(); switch (op4) {
				case 'a': printAlunos(lAlunos); break;
				case 'd': printDisciplinas(lDisci); break;
				case 'c': printCursos(lCursos); break;
				case 'n': printNotasAlunos(lAlunos); break;
				}
				break;
			case 'r': lNotas=removerNotas(lAlunos,lDisci,lCursos,lSexo,lNotas); break;
		}
	} while (op1!='e');
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Blz! Desculpe não responder antes. Estava preparando um post/tutorial para ajudá-la. =P

 

Boa sorte com o projeto. FLW!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.