Comportamento estranho da estrutura if - else if - else

Boa tarde pessoal. Segue o código com o problema. Quando o else if é satisfeito, além do else executar também, ele executa primeiro, ou seja, antes do else if.
PS: é linguagem C

		if(tecla_code == 27){
			printf("\n\n Executou 'if' ");
			retorna_inicio = true;
			sair = true;
		}
		else if(tecla_code == 59){
			printf("\n\n Executou ''else if' ");
			retorna_inicio = true;
			sair = true;
		}
		else{
			printf("\n\n Executou 'else' ");
		}

PS: Como colocar o código aqui sem interferir no texto?

Não entendo nada de C – nem de outras linguagens atuais – mas me parece que precisa fechar o 2º “if”, antes do “else” do 1º “if”.

Só acho.

if blablabla
      ha ha ha
  else
    -------------
    if  blebleble
          he he he
      else
          hi hi hi
    endif
    -------------
  else
    ho ho ho
endif

Agora, como fazer assim nesse código, não sei.

Isso é python?

Não é nenhuma linguagem específica:

É só uma “lógica geral”. – Cada linguagem implementa de um jeito. – Mas o princípio básico é universal.

Antigamente, na Matemática, era lógica simbólica. – Agora, talvez faça parte da “lógica de programação”.

Se você abre um parêntesis no começo, tem de fechar o parêntesis no final.

Se bota um colchete dentro do parêntesis tem de fechar o colchete antes de fechar o parêntesis.

Mas os detalhes de cada linguagem – só perguntando aos especialistas de cada linguagem.

Em C, Java e Javascript o “else” é só no final para identificar a última opção, seguindo a mesma formação do código que enviei.

Você provavelmente está sofrendo de algum outro problema no seu código, como por exemplo buffer de teclado sujo, ou talvez você não percebeu que o seu código está dentro de um loop de alguma biblioteca externa.

Você está usando algo como ncurses ou similar? Algumas destas libs costumam ter um loop / lifecycle implícito que deve ser levado em conta ao escrever código.

Por desencargo de consciência eu sempre uso “fflush(stdin)” após os comandos de entrada, seja o “scanf()” ou “_getch()” e demais da linguagem.

Tome cuidado, pois que eu saiba fflush é só definido para stdout em sistemas UNIX, fflush(stdin) não é definido em sistemas UNIX.

Se não for isso, tem alguns outros possíveis gotchas que consigo imaginar, mas você tem mais chance de resolver rápido esse tipo de problema colocando um exemplo completo (funcional sozinho)

Tá, explica isso melhor pra mim. Estou desenvolvendo um pequeno projeto no windows, para depois testar o código também no linux. É só para treinar mesmo, após concluir o curso de C.

Explicar o que exatamente, o fato de fflush(stdin) não ser definido em sistemas UNIX? Bom, porque o Linux e outros sistemas UNIX seguem a especificação da linguagem mais fielmente.

Uma linguagem de programação no fundo é só uma especificação, você pode pensar no C meio que como uma especificação ABNT. No caso, nas especificações da linguagem, esse comportamento para fflush não foi concebido.

Cada sistema realiza a sua própria implementação da linguagem, por exemplo, GCC + glibc é o mais comum no linux. No caso do Windows eles adicionaram por conta própria esse comportamento como um extra.

A prática recomendada é sempre se limitar ao padrão da linguagem se você está almejando compatibilidade ampla.