Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
MatheusINF

C error 'else' without a previous 'if'

Recommended Posts

Fala galera tudo bem? 

Estou no primeiro ano do curso de informática e preciso fazer um algoritmo que leia o salário de um vendedor e some sua comissão de acordo com o total de vendas porém sempre dá esse erro, alguém da um help ae :D

#include <stdio.h>

int main()
{
    // VARIAVEIS
    float sfixo;
    float stotal;
    int tv;


    // INICIO
    printf ("Digite o salario do vendedor:\n");
    scanf ("%f",&sfixo);
    printf ("Digite o total de vendas do vendedor:\n");
    scanf ("%i",&tv);

    if (tv<=10000);
    stotal=sfixo+(tv*3/100);
    printf("O salario do vendedor e de:%f",stotal);
    else if (tv >10000 && tv <= 50000);
    stotal=sfixo+(tv*5/100);
    printf("O salario do vendedor e de:%f",stotal);
    else (tv>50000);
    stotal=sfixo+(tv*10/100);
    printf("O salario do vendedor e de:%f",stotal);
    

    return 0;
}

 

Editado por Simon Viegas
Inserir tag CODE
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@MatheusINF      você não colocou as chaves  { }  no if  e tudo bem ele funciona sem elas, mas só uma linha depois do if, mas  quando você colocou o else já havia passado duas linhas por isso o erro .  então para corrigir adicione as chaves assim :

scanf ("%i",&tv);
if (tv<=10000){    /* aqui precisa das chaves pois tem mais de uma linha dentro do if */
    stotal=sfixo+(tv*3/100);
    printf("O salario do vendedor e de:%f",stotal);
}
else{
    if(tv >10000 && tv <= 50000){/* aqui precisa das chaves pois tem mais de uma linha */
        stotal=sfixo+(tv*5/100);
        printf("O salario do vendedor e de:%f",stotal);
    }
    else{ 
        if(tv>50000)       /*  aqui não tem chave mas funciona */
            stotal=sfixo+(tv*10/100);           
    }
}

 

  • Curtir 2
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Além disso, tem um ponto e vírgula (;) depois dos IFs. 

Sempre que utilizar mais de uma linha dentro do IF ou outra estrutura, coloque chaves.

  • Curtir 1
  • Obrigado 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

1#

Sempre mantenha o código indentado. Segue código original:

#include <stdio.h>
int main() {
    // VARIAVEIS
    float sfixo;
    float stotal;
    int tv;

    // INICIO
    printf ("Digite o salario do vendedor:\n");
    scanf ("%f",&sfixo);
    printf ("Digite o total de vendas do vendedor:\n");
    scanf ("%i",&tv);

    if (tv<=10000);
        stotal=sfixo+(tv*3/100);
    printf("O salario do vendedor e de:%f",stotal);
    else if (tv >10000 && tv <= 50000);
        stotal=sfixo+(tv*5/100);
    printf("O salario do vendedor e de:%f",stotal);
    else (tv>50000);
        stotal=sfixo+(tv*10/100);
    printf("O salario do vendedor e de:%f",stotal);
    return 0;
}

Perceba que só pela indentação, já identificava a falta do "{}".... e como citado, não tem ";" após a expressão.

 

 

 

2#

Como as correções já foram citadas, segue um código referência:

#include <stdio.h>
int main() {
    // VARIAVEIS
    float sfixo;
    float stotal;
    int tv;

    // INICIO
    printf ("Digite o salario do vendedor:\n");
    scanf ("%f",&sfixo);
    printf ("Digite o total de vendas do vendedor:\n");
    scanf ("%i",&tv);
    if (tv <= 10000) {
        stotal=sfixo+(tv*3/100);
        printf("O salario do vendedor e de:%f",stotal);
    }
    else {
        if (tv > 10000 && tv <= 50000) {
            stotal=sfixo+(tv*5/100);
            printf("O salario do vendedor e de:%f",stotal);
        }
        else {
            if (tv > 50000) {
                stotal=sfixo+(tv*10/100);
            }
        }
    }
    printf("O salario do vendedor e de:%f",stotal);
    return 0;
}

 

 

 

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim cara vou começar fazer é que na aula o professor falou que quando tem mais de 1 if, colocar "else if", ai o código fica meio estranho, mais vou começar fazer assim, valeu

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

3#

Na dúvida, insira chaves em tudo, mas para efeito didático, abaixo indico onde precisa e NÃO precisa de chaves.

include <stdio.h>
int main() {
    // VARIAVEIS
    float sfixo;
    float stotal;
    int tv;

    // INICIO
    printf ("Digite o salario do vendedor:\n");
    scanf ("%f",&sfixo);
    printf ("Digite o total de vendas do vendedor:\n");
    scanf ("%i",&tv);
    if (tv <= 10000) { //aqui precisa de chaves, pois só tem uma instrução dentro do else
        stotal=sfixo+(tv*3/100);
        printf("O salario do vendedor e de:%f",stotal);
    }
    else { //aqui NÃO precisa de chaves, pois só tem uma instrução dentro do else
        if (tv > 10000 && tv <= 50000) { //aqui precisa de chaves, pois só tem uma instrução dentro do else
            stotal=sfixo+(tv*5/100);
            printf("O salario do vendedor e de:%f",stotal);
        }
        else { //aqui NÃO precisa de chaves, pois só tem uma instrução dentro do else
            if (tv > 50000) { //aqui NÃO precisa de chaves, pois só tem uma instrução dentro do else
                stotal=sfixo+(tv*10/100);
            }
        }
    }
    printf("O salario do vendedor e de:%f",stotal);
    return 0;
}

 

 

4#

O último if não é necessário, pois necessariamente será maior que 50000, logo, não faz sentido verificar.

 

Ficaria assim:

    else {
        if (tv > 10000 && tv <= 50000) {
            stotal=sfixo+(tv*5/100);
            printf("O salario do vendedor e de:%f",stotal);
        }
        else {
            stotal=sfixo+(tv*10/100);
        }
    }

 

5#

Segue código resumido:
 

#include <stdio.h>
int main() {
    // VARIAVEIS
    float sfixo;
    float stotal;
    int tv;

    // INICIO
    printf ("Digite o salario do vendedor:\n");
    scanf ("%f",&sfixo);
    printf ("Digite o total de vendas do vendedor:\n");
    scanf ("%i",&tv);
    if (tv <= 10000) {
        stotal=sfixo+(tv*3/100);
        printf("O salario do vendedor e de:%f",stotal);
    }
    else
        if (tv > 10000 && tv <= 50000) {
            stotal=sfixo+(tv*5/100);
            printf("O salario do vendedor e de:%f",stotal);
        }
        else
            stotal=sfixo+(tv*10/100);
    printf("O salario do vendedor e de:%f",stotal);
    return 0;
}

 

 

6#

25 minutos atrás, MatheusINF disse:

Sim cara vou começar fazer é que na aula o professor falou que quando tem mais de 1 if, colocar "else if", ai o código fica meio estranho, mais vou começar fazer assim, valeu

 

Não é bem assim... depende do contexto. É necessário entender com o fluxo funciona.

 

Veja, primeiro você aprende if. Ele serve para "selecionar trechos" ou o mesmo que "desvia o fluxo padrão do programa", ou seja, sem eles, os programa seria executados apenas em sequência... mas, como observado, as vezes é necessário "seguir um caminho diferente de acordo com o contexto", ou seja, no seu caso, "a depender do valor da TV, você precisa aplicar um desconto diferente"...

 

Então... no seu programa, você poderia usar várias if... um para cada um... sem os else. Correto?

 

O else entra apenas para "ajudar o computador a não perder tempo e também simplificar a estrutra... veja:

 

 

Sem o else (senão), temos essa estrutura:

se (tv<10000) então
   faço algo
se (tv>=10000) e (tv<50000) então
   faço outro algo
se (tv>=50000)
  faço um terceiro algo

Supomos que a TV custa 15000.

 

O preço da TV é menor que 10k? não, pulo ("não desvio")

O preço da TV é maior que 10k e menor que 50k? sim, desvio e faço o que tenho que fazer

O preço da TV é maior que 50k? não.

 

Então, perceba que mesmo sendo desviado no segundo se (if), o computador perguntou se é maior que 50k... oras! como um número pode ser ao mesmo tempo menor que 50k e maior igual a 50k?   É IMPOSSÍVEL... pelo menos no que definimos na matemática... concorda?

 

Daí surge o "senão" (else), ou seja, como uma condição anterior automaticamente inviabiliza a verificação das condições posteriores, ela fará que o computador pule para o final...

 

Ou seja, OU entra no if, OU entra no senão...

 

se (tv<10000) então
   faço algo
senao
    se (tv>=10000) e (tv<50000) então
   	    faço outro algo
    senao
        faço um terceiro algo

Entende?

 

Logo:

25 minutos atrás, MatheusINF disse:

o professor falou que quando tem mais de 1 if

Isso só seria correto, quando os if tem certo tipo de relação entre si. Como é o caso do teu algoritmo. Ao mesmo tempo que o último não precisa de if, pois entra outro conceito... (que não lembro o nome agora, mas que é ), que necessariamente a condição verificada sempre será válida, logo, não sendo necessário verificar. Seria como perguntar "!1 < 2 ?".

 

 

***

 

Qualquer dívida é só perguntar.

  • Curtir 2
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas Ah sim tu explicou a aula dele de forma bem melhor em poucos minutos sauuasuiash, tem mais alguns exercicios e vou resolver como você disse, brigadãooo.

Editado por MatheusINF
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza... qualquer dúvida é só postar.

 

obs.:

if (dúvida for nesse mesmo exercício) {
   posta aqui nesse tópico
} else {
   if (dúvida for em outro exercío novo) {
      cria um novo tópico para o exercício
   }
}  

 

  • Curtir 2

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






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

×