Ir ao conteúdo

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


Ir à solução Resolvido por Aoi Todo,

Posts recomendados

Postado

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
  • Membro VIP
  • Solução
Postado

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

  Em 26/03/2020 às 20:22, Giancarlo Marsola disse:

if (produto == 1) ;

Expandir  

 

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 26/03/2020 às 20:22, Giancarlo Marsola disse:

if (produto == 5 && 6 )

Expandir  

 

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.

  Em 26/03/2020 às 20:22, Giancarlo Marsola disse:

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

Expandir  

 

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
Postado
  Em 26/03/2020 às 21:52, 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().

Expandir  

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
  • Membro VIP
Postado

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:

  Em 26/03/2020 às 21:57, Giancarlo Marsola disse:

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

Expandir  

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

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!