Ir ao conteúdo
  • Cadastre-se
Giancarlo Marsola

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

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

 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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

×
×
  • Criar novo...

Eletrônica

PROMOÇÃO DE QUARENTENA

Aproveite o isolamento social para aprender eletrônica!
De R$ 39,90 por apenas R$ 19,90
Só até as 23h59min desta sexta-feira 10/04/2020

CLIQUE AQUI E COMPRE AGORA MESMO!