Ir ao conteúdo
  • Cadastre-se

C Codigo compilado com problema


Posts recomendados

Meu código está dando um erro, comecei a estudar C a pouco tempo, vou colocar duas imagens para exemplificar :

image.png.50866f2d200c09afc130453a505ea8f1.png

 E o erro seria esse

image.png.d5a338fbed05f6e65c1b326c95a39f76.png

 

O ultimo printf iria entrar em uma condicional if, no caso iria verificar se o Espaco disponivel era maior que o tamanho total e apresentar uma mensagem porém como é um numero negativo ele sempre vai ser menor.

 

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

Eu refiz seu código e funcionou conforme o planejado:

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

int main() {
    int armazenamentoTotal = 0;
    int armazenamentoDisponivel = 0;
    int armezenamentoNecessario = 0;
    int quantidadeMusicas = 0;
    int tamanhoMedio = 0;

    printf("Digite o armazenamento total (MB): ");
    scanf(" %i", &armazenamentoTotal);

    printf("Digite a quantidade de musicas: ");
    scanf(" %i", &quantidadeMusicas);

    printf("Digite o tamanho médio das músicas (MB): ");
    scanf(" %i", &tamanhoMedio);

    armezenamentoNecessario = tamanhoMedio * quantidadeMusicas;
    armazenamentoDisponivel = armazenamentoTotal - armezenamentoNecessario;
    
    if (armazenamentoDisponivel < 0) {
        printf("[ E ]: O armazenamento não é suficiente para acomodar todas as músicas. \n");
        armazenamentoDisponivel = 0;
    }
    
    printf(">> Relatório \n");
    printf("     Armazenamento Total: %i \n", armazenamentoTotal);
    printf("   Quantidade de músicas: %i \n", quantidadeMusicas);
    printf("Armazenamento disponível: %i \n", armazenamentoDisponivel);
    printf("           Tamanho médio: %i \n", tamanhoMedio);
    printf("Armazenamento necessário: %i \n", armezenamentoNecessario);

    return 0;
}

 

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

30 minutos atrás, AdrianoSiqueira disse:

Eu refiz seu código e funcionou conforme o planejado:


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

int main() {
    int armazenamentoTotal = 0;
    int armazenamentoDisponivel = 0;
    int armezenamentoNecessario = 0;
    int quantidadeMusicas = 0;
    int tamanhoMedio = 0;

    printf("Digite o armazenamento total (MB): ");
    scanf(" %i", &armazenamentoTotal);

    printf("Digite a quantidade de musicas: ");
    scanf(" %i", &quantidadeMusicas);

    printf("Digite o tamanho médio das músicas (MB): ");
    scanf(" %i", &tamanhoMedio);

    armezenamentoNecessario = tamanhoMedio * quantidadeMusicas;
    armazenamentoDisponivel = armazenamentoTotal - armezenamentoNecessario;
    
    if (armazenamentoDisponivel < 0) {
        printf("[ E ]: O armazenamento não é suficiente para acomodar todas as músicas. \n");
        armazenamentoDisponivel = 0;
    }
    
    printf(">> Relatório \n");
    printf("     Armazenamento Total: %i \n", armazenamentoTotal);
    printf("   Quantidade de músicas: %i \n", quantidadeMusicas);
    printf("Armazenamento disponível: %i \n", armazenamentoDisponivel);
    printf("           Tamanho médio: %i \n", tamanhoMedio);
    printf("Armazenamento necessário: %i \n", armezenamentoNecessario);

    return 0;
}

 

Fiz um pouco diferente porque não entendi algumas coisas como o " if (armazenamentoDisponivel < 0), por que não comparar com o tamanho necessario ?

 

Seu código ficou muito mais completo, só que eu preciso que a saída seja aquelas frases porque pede no exercicio, mas me ajudou bastante, usei como base até.

 

Enfim, ficou assim :

image.png.62dfa12fb0f8888fd5775df5f995eead.png

 
adicionado 3 minutos depois
34 minutos atrás, KXSY disse:

@Giancarlo Marsola C é a sua primeira linguagem de programação?

 

Para pegar números reais você tem que usar o especificador de formato "%f"

 

para mais detalhes veja nesse livro aqui C completo e total na pagina 225.   

 Não sei porque mas não funcionou, tentei o %i e ai deu certo. Obrigado pelo livro

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

O problema é o seguinte, se o tamanhoNecessário for maior do que o armazenamentoTotal, a hora que fazer a subtração, o armazenamentoDisponível será negativo.

 

Pense em um exemplo pequeno: quanto é 2 - 3? Será -1. O armezenamentoDisponível não pode ser negativo. Por isso eu fiz daquele jeito.

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

@AdrianoSiqueira Entendi. Mas porque então igualar a 0 ?

Tinha outro exercicio com a mesma lógica, e em vez de fazer como eu fazia segui seu modelo e funcionou, porém, queria entender essa parte especificamente.

 

if (armazenamentoDisponivel < 0)

{

    printf("[ E ]: O armazenamento não é suficiente para acomodar todas as músicas. \n");

     armazenamentoDisponivel = 0;

}

 

Essas duas equivalências a zero, conseguiria me explicar ?

Link para o comentário
Compartilhar em outros sites

De acordo com o cálculo, é possível que armazenamentoDisponivel seja menor que 0, indicando que não temos espaço suficiente. Pois bem, aí eu pergunto, alguma vez você abriu as configurações do seu celular, foi na opção de armazenamento e viu um número negativo no "Espaço Disponível"? A resposta é não, pois isso não existe.

 

Teoricamente, em uma situação real, o programa deveria interromper o que estava fazendo uma vez que fosse detectada memória insuficiente. Mas como o seu programa é, aparentemente, de testes, então reajustamos o valor para 0 para indicar que não temos memória suficiente. Aí podemos mostrar o relatório final sem exibir um número negativo.

adicionado 14 minutos depois

Brinque um pouco com esse código (apenas use) e você vai entender o que eu quero dizer:

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

int main() {
    int armazenamentoTotal = 1000;
    int armazenamentoNecessario = 0;

    int quantidadeArquivos = 0;
    int tamanhoArquivos = 0;

    printf("Quantos arquivos deseja salvar?: ");
    scanf(" %i", &quantidadeArquivos);

    printf("Qual o tamanho de cada arquivo?: ");
    scanf(" %i", &tamanhoArquivos);

    // Calcular o tamanho necessário
    armazenamentoNecessario = quantidadeArquivos * tamanhoArquivos;

    // Se não temos memória suficiente, então não podemos continuar
    if (armazenamentoNecessario > armazenamentoTotal) {
        printf("[ E ]: Armazenamento insuficiente para salvar esses arquivos. \n");
        return 1;   // Return 1 porque temos um erro
    }
    
    printf("[ I ]: Salvando os arquivos. \n");
    printf("       %i arquivos de %i MB cada. \n", quantidadeArquivos, tamanhoArquivos);
    printf("       Irá ocupar [ %i de %i ] MB do armazenamento. \n", armazenamentoNecessario, armazenamentoTotal);
    printf("[ I ]: Depois da operação, %i MB estarão livres. \n", (armazenamentoTotal - armazenamentoNecessario));

    return 0;
}

 

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!