Ir ao conteúdo

Posts recomendados

Postado

Boa noite pessoal, alguém pode me ajudar com esse código ? está dando erro na hora de compilar e não consigo enxergar onde estou errando, se alguém puder rodar ai e me ajudar fico grato.

 

#include <stdio.h>
#include <stdlib.h>
int main()
{
    float nota [4];
     float soma = 1;
    int i, opcao;
    printf ("Digite as notas: \n");
    for (i=0;i<4;i++){
        printf ("Nota%d:", i);
        scanf ("%f", &nota);
    }
    printf("\t\t\t CALCULADORA\n");
        printf("-----------------------------------------------------------------------------\n");
        printf(" [1] Soma\n");
        printf(" [2] multiplicacao\n");
        printf(" Sua opção: ");
        scanf("%d", &opcao);
        printf("\n-----------------------------------------------------------------------------\n");
        
    switch(opcao)
{
        case 1:
    for (i=0;i<4;i++){
    soma = soma + nota(i);
    printf ("soma %f:", soma);
    break;
}
    
        case 2:
    float multiplicacao = 1;
    for (i=0;i<4;i++){
    multiplicacao = multiplicacao * nota;
    printf ("multiplicacao %f", multiplicacao);
    break;
}
    default:
    printf("Opção inválida, tente novamente!");
    break;
    
}
return 0;
}

 

Postado

Você declarou nota como um vetor, então terá que fazer a leitura com índice:

for (i=0;i<4;i++){
  printf ("Nota%d:", i);
  scanf ("%f", &nota[i]);
}

 

adicionado 1 minuto depois

Além disso, escreveu:

soma = soma + nota(i);

Quando o correto é com colchetes:

soma = soma + nota[i];

 

adicionado 3 minutos depois

Novamente escrever nota sem o índice:

for (i=0;i<4;i++){
    multiplicacao = multiplicacao * nota;
    printf ("multiplicacao %f", multiplicacao);
    break;
}

Quando deveria colocar o índice entre os colchetes:

for (i=0;i<4;i++){
    multiplicacao = multiplicacao * nota[i];
    printf ("multiplicacao %f", multiplicacao);
    break;
}

 

adicionado 5 minutos depois

O valor default não tem break:

default:
    printf("Opção inválida, tente novamente!");

 

adicionado 12 minutos depois

Escreveu o switch com as chaves dos for nos lugares errados:

switch(opcao)
{
     case 1:
    for (i=0;i<4;i++){
    soma = soma + nota(i);
    printf ("soma %f:", soma);
    break;
}
    
        case 2:
    float multiplicacao = 1;
    for (i=0;i<4;i++){
    multiplicacao = multiplicacao * nota;
    printf ("multiplicacao %f", multiplicacao);
    break;
}
    default:
    printf("Opção inválida, tente novamente!");
    break;
    
}

Deveria ficar assim:

switch(opcao){
        case 1:
            for(i=0;i<4;i++){
                soma = soma + nota[i];
                printf ("soma %f:", soma);
            }
        break;
        case 2:
        float multiplicacao = 1;
        for(i=0;i<4;i++){
            multiplicacao = multiplicacao * nota[i];
            printf ("multiplicacao %f", multiplicacao);
        }
        break;
        default:
        printf("Opção inválida, tente novamente!");
    }

 

adicionado 14 minutos depois

Por último, não pode declarar variável dentro do case, tem que declarar antes do primeiro case:

switch(opcao){
	float multiplicacao = 1;

 

adicionado 15 minutos depois

Foi mal, mas eu nunca tinha visto tantos erros num programa tão pequeno. Precisa praticar muito.

  • Curtir 1
Postado
23 minutos atrás, byForteES disse:

float multiplicacao = 1;  

muito obrigado Luis mas agra esta apresentando o seguinte erro na linha que eu citei
"32    5    C:\Users\CASA\Documents\C.c    [Error] a label can only be part of a statement and a declaration is not a statement"

  • Curtir 1
Postado
1 minuto atrás, byForteES disse:

muito obrigado Luis mas agra esta apresentando o seguinte erro na linha que eu citei
"32    5    C:\Users\CASA\Documents\C.c    [Error] a label can only be part of a statement and a declaration is not a statement"

Revise as correções, o erro é na linha 32. Compilei aqui e funcionou sem erro.

Postado

@Luís Roberto C. da Silva Ainda tem erros!

@byForteES Não sei como conseguiu compilar...

-Para que o scanf() leia e armazene cada nota, você tem que dar pra ele ler nota[ i ] a cada passagem no loop, não apenas nota.

-Você está tentando imprimir acentuação, isso não vai funcionar sem a biblioteca locale.h.

-Não peça as notas começando do 0, comece do 1.

-Não imprima o resultado a cada passagem no loop, apenas quando sair dele.

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

int main()
{
    setlocale(LC_ALL, "Portuguese");
    float nota [4];
    float soma = 0, multiplicacao = 0;
    int i, opcao;
    printf ("Digite as notas: \n");
    for (i=1;i<=4;i++){
        printf ("Nota [%d]: ", i);
        scanf ("%f", &nota[i]);
    }
    printf("\t\t\t CALCULADORA\n");
        printf("-----------------------------------------------------------------------------\n");
        printf(" [1] Soma\n");
        printf(" [2] multiplicação\n");
        printf(" Sua opção: ");
        scanf("%d", &opcao);
        printf("\n-----------------------------------------------------------------------------\n");
        
    switch(opcao){
        case 1:
            for(i=1;i<=4;i++){
                soma += nota[i];
            }
            printf ("Resultado da soma: %.2f", soma);
            break;
            
        case 2:
            for(multiplicacao = nota[1], i=2;i<=4;i++){
                multiplicacao *= nota[i];
            }
            printf ("Resultado da multiplicação: %.2f", multiplicacao);
            break;
            
        default:
            printf("Opção inválida, tente novamente!");
    }
    return 0;
}

 

  • Curtir 1
Postado
2 minutos atrás, Lucca Rodrigues disse:

Para que o scanf() leia e armazene cada nota, você tem que dar pra ele ler nota a cada passagem no loop, não apenas nota.

Isto já estava corrigido, acho que você não percebeu.

4 minutos atrás, Lucca Rodrigues disse:

Você está tentando imprimir acentuação, isso não vai funcionar sem a biblioteca locale.h.

Não peça as notas começando do 0, comece do 1.

Não imprima o resultado a cada passagem no loop, apenas quando sair dele. 

Isso é opcional, principalmente a questão de ler a nota do 1, pra quem estar começando é melhor começar do zero pra não confundir, pois o primeiro índice do vetor é zero.

  • Curtir 2
Postado

@Luís Roberto C. da Silva O do scanf() não tinha visto mesmo, você já havia comentado.

Mas prove tentar imprimir acentuação sem a biblioteca locale.h.

Não da muito certo...

image.png.73d05ab56cc731a543534a081691b3ea.png

E também o certo é não imprimir o resultado 4 vezes. É 1 resultado, então imprima 1 vez.

Imprimir notas a partir do 0 ou do 1 da no mesmo, só que a partir de 1 é mais natural.

  • Curtir 1
Postado

@byForteES O printf() estava dentro do laço de repetição (o comando for). A cada passagem no laço, a função printf() estava sendo usada para imprimir o resultado.

Solução:

Coloque o printf() depois do laço. O laço, neste caso, é usado somente para obter o valor da soma ou da multiplicação, e depois, esse valor deve impresso com o printf().

  • Curtir 1
Postado
4 minutos atrás, Lucca Rodrigues disse:

@Luís Roberto C. da Silva O do scanf() não tinha visto mesmo, você já havia comentado.

Mas prove tentar imprimir acentuação sem a biblioteca locale.h.

Não da muito certo...

image.png.73d05ab56cc731a543534a081691b3ea.png

E também o certo é não imprimir o resultado 4 vezes. É 1 resultado, então imprima 1 vez.

Imprimir notas a partir do 0 ou do 1 da no mesmo, só que a partir de 1 é mais natural.

Sim, sim. Por isso eu não usava acentuação no início da faculdade, pra evitar biblioteca a mais e erro na impressão dos textos.

 

Quanto ao restante é uma questão de aprendizagem natural, não precisa corrigir praticas no início, isso vem com o tempo.

  • 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

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!