Ir ao conteúdo
  • Cadastre-se

C Erro de compilação 'else' without a previous 'if' + substituição


Ir à solução Resolvido por Aoi Todo,

Posts recomendados

Pessoal estou com esse problema na hora de compilar esse código :

#include <stdio.h>
#include <locale.h>


int main () {

//variaveis
    int produto;
    setlocale(LC_ALL, "portuguese");

    printf("Digite o codigo do produto:");
    scanf("%d", &produto);

    if (produto == 1); {
        printf("Código 1: SUL"); }
        else {
            if (produto == 2); {
               printf("Código 2: NORTE"); }
                else {
                    if (produto == 5 && 6 ); {
                    printf ("Código 3: NORDESTE"); }
                    else {
                        if (produto == 7 && 8 && 9);{
                        printf("Código 4: SUDESTE"); }
                        else {
                            if (produto >=10 && <=20); {
                            printf("Código 5: Centro-Oeste");}
                                else (
                                   if (produto >=25 && <=50 );{
                                        printf("Código 6: NORDESTE");
                                      } else {
                                        return 0;
                                      }
                      )


}
   }
     }
        }
         }

Eu não consegui localizar o erro, imagino que seja alguma chave (apesar de ter conferido).

 

Outra coisa, alguém poderia me mostrar uma possível substituição para esses múltiplos if-else ?

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução

 Olá. no else e if, não se utiliza ponto e virgula como você fez diversas vezes:

1 hora atrás, Giancarlo Marsola disse:

if (produto == 1) ;

 

O modo correto, é o seguinte, sem pontos e virgulas:

if(condicao){ 
	printf("");

}else{
	printf("");
}

 

 

Sobre os seus "else { if(){} ", Não é assim que se usa else if. Não está errado, mas fica muito muito mais organizado e compreensível da seguinte forma:

if(condicao1){

}else if(condicao2){
 
}else if(condicao3){
  
}else if(condicao4){
  ...
else{
  }

Na parte abaixo, eu não sei exatamente o que você queria fazer, mas não é assim que se usam operadores lógicos em C.

E acho que você errou o operador, pois o produto nunca vai ser 5 E 6. Ele pode ser 5 OU 6.

1 hora atrás, Giancarlo Marsola disse:

if (produto == 5 && 6 )

 

Em C :

&& = operador AND

|| = operador OR

 

Se quiser que a condição seja o produto 5 ou o 6, deve fazer da seguinte forma:

 

else if ( (produto == 5 ) || (produto = 6) ) {

Já coloquei o else, pra te dar uma noção de como deveria estar.

 

Na parte abaixo, suponho, que você queria que o produto esteja entre o valor 10 e o valor 20. Ou seja Maior que 10 AND menor que 20. Você acertou o operador, mas a sintaxe está errada.

1 hora atrás, Giancarlo Marsola disse:

if (produto >=10 && <=20);

 

O jeito certo é o seguinte:

	else if((produto >=10 )&& (produto <=20)){

 

Última coisa, o programa sempre tem que retornar um valor. Então o return deve estar fora dos ifs, a não ser que tenha mais de um return. Eu tiraria o return do else, e colocaria ele no final do código da int main().

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

4 minutos atrás, Arthur Vandellay disse:

 Olá. no else e if, não se utiliza ponto e virgula como você fez diversas vezes:

 

O modo correto, é o seguinte, sem pontos e virgulas:


if(condicao){ 
	printf("");

}else{
	printf("");
}

 

 

Sobre os seus "else { if(){} ", Não é assim que se usa else if. Não está errado, mas fica muito muito mais organizado e compreensível da seguinte forma:


if(condicao1){

}else if(condicao2){
 
}else if(condicao3){
  
}else if(condicao4){
  ...
else{
  }

Na parte abaixo, eu não sei exatamente o que você queria fazer, mas não é assim que se usam operadores lógicos em C.

E acho que você errou o operador, pois o produto nunca vai ser 5 E 6. Ele pode ser 5 OU 6.

 

Em C :

&& = operador AND

|| = operador OR

 

Se quiser que a condição seja o produto 5 ou o 6, deve fazer da seguinte forma:

 


else if ( (produto == 5 ) || (produto = 6) ) {

Já coloquei o else, pra te dar uma noção de como deveria estar.

 

Na parte abaixo, suponho, que você queria que o produto esteja entre o valor 10 e o valor 20. Ou seja Maior que 10 AND menor que 20. Você acertou o operador, mas a sintaxe está errada.

 

O jeito certo é o seguinte:


	else if((produto >=10 )&& (produto <=20)){

 

Última coisa, o programa sempre tem que retornar um valor. Então o return deve estar fora dos ifs, a não ser que tenha mais de um return. Eu tiraria o return do else, e colocaria ele no final do código da int main().

Que aula. Mas qual seria o possivel substituto para os multiplos if-else ?

adicionado 19 minutos depois

@Arthur Vandellay

Novo código, simplesmente legível e funcional :

#include <stdio.h>
#include <locale.h>


int main () {

//variaveis
    int produto;
    setlocale(LC_ALL, "portuguese");

    printf("Digite o codigo do produto:");
    scanf("%d", &produto);

   if (produto == 1) {
        printf("Código 1: SUL");
    }else if (produto == 2) {
        printf("Código 2: Norte");
    }else if ((produto >=5 )&&(produto<=6)){
        printf("Código 5 ou 6: Nordeste");
    }else if ((produto >=7 )&&(produto<=9)){
        printf ("Código 7,8,9: Sudeste ");
    }else if ((produto >=10 )&&(produto<=20)) {
        printf("Código 10 a 20: Centro-Oeste");
    }else if ((produto >=25 )&&(produto<=50)) {
        printf("Código 25 a 50: Nordeste");
    }
    if (produto == 4) {
        printf("Importado");
    }else if ((produto >=21 )&&(produto<=24)){
            printf("Código 21 a 24: Importado");
    }else if (produto >=51) {
        printf("Código +51: Importado");
}
}
  

 Se você vê que dá pra melhorar por favor me avise.

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Ficou bem melhor agora, parabéns.Eu não mudaria nada.

Um substituto do "else if," é o comando "switch case", vale a pena dar uma pesquisada, mas ele não funciona para situações onde você tem intervalos, tipo esse:

57 minutos atrás, Giancarlo Marsola disse:

(produto >=25 )&&(produto<=50)

Você teria que listar todos os casos um por um, 25,26,27,28...50.

Mas mesmo assim, vale a pena dar uma pesquisada, qualquer dúvida só perguntar aí.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...