Ir ao conteúdo

Posts recomendados

Postado

Olá! Gostaria de saber como faço a exibição de um printf a partir de outra função. O meu código é este:

 

#include <stdio.h>

int main() {
	float media;
	int faltas;
	
	scanf("%f", &media);
	
	scanf("%d", &faltas);
	
	char ClassificaAluno (float media, int faltas);
	
	printf(ClassificaAluno);
	
	return 0;
}

char ClassificaAluno (float media, int faltas) {
	if (faltas <= 10 && media >= 9.5) {
		printf("APROVADO COM LOUVOR");
	}
	
	if (faltas <= 10 && media <= 9.5) {
		printf("APROVADO");
	}
	
	if (faltas <= 10 && media < 7) {
		printf("REPROVADO");
	}
	
	if (faltas > 10) {
		printf("REPROVADO POR FALTAS");
	}
}

 

  • Obrigado 1
Postado

@programadornovatoc      precisa enviar as variáveis com os dados , por parâmetro ,  mas não pode especificar o tipo na hora de enviar , e há um erro nos if's , então seu código poderia ser assim  :

#include <stdio.h>
char ClassificaAluno(float media, int faltas);/* precisa do protótipo da função */
int main(){
    system("color f9");/* 1º cor da tela 2º cor da letra */
    float media;
    int faltas;
    scanf("%f", &media);
    scanf("%d", &faltas);
    ClassificaAluno (media,faltas);
    //printf(ClassificaAluno);
    return 0;
}
char ClassificaAluno(float media, int faltas){
    if (faltas <= 10 && media >= 9.5) {
        printf("APROVADO COM LOUVOR");
    }
    else{/* o else ajuda bastante */
        if(faltas <= 10 && ( media <= 9.5 && media >=7)){
            printf("APROVADO");
        }
        else{
            if(faltas <= 10 && media < 7){
                printf("REPROVADO\n\n");
            }
        }
    }
    if(faltas > 10){/* independente da média , faltas reprovam */
        printf("REPROVADO POR FALTAS");
    }
}

 

  • Obrigado 1
Postado
Em 16/08/2019 às 19:57, programadornovatoc disse:

a exibição de um printf a partir de outra função

Olá!

 

Isso como escreveu não faz muito sentido: printf() é uma função e o resultado vai ser exibido exatamente na hora e local em que for chamada

 

Imagino que queira usar um printf() em main() para exiir o resultado do cálculo de uma função, como no código que postou: usar printf() em main() para exibir o resultado de ClassificaALuno(). Vou te mostrar um exemplo, com uns palpites:

 

Seu código não está completo:

printf(ClassificaAluno);

O formato de printf() é printf(formato, argumentos);

No formato você usa algo como fez nas chamadas a scanf()

 

printf("ClassificaAluno");

mostra simplesmente ClassificaAluno.

printf(ClassificaAluno);

não faz sentido.

 

Agora alguns valores que começam por % nesse primeiro argumento, formato, estão tabelados na documentação e são substituídos pelos valores dos argumentos seguintes. Exemplo:

%d    indica um valor inteiro, como o número de faltas

%f     um valor com casa decimais, como a média

%s    uma string como "ClassificaAluno"

 

int f = 4;

int m = 5.56;

char* s = "Umas palavras"

printf("Um inteiro (%d)\n", f);

printf("Um valor decimal [%f]\n", m);

 printf("Uma cadeia de caracteres [%s]\n",  s);

 

Esse valor "\n" faz parte de uma outra lista de caracteres especiais que printf() gera, e nesse caso muda de linha --- newline.

 

Logo abaixo vou mostrar a saída destes comandos em um programa:

    int f = 4;
    float m = 5.56;
    char* s = "Umas palavras";

    printf("ClassificaAluno\n");
    printf("Um inteiro (%d)\n", f);
    printf("Um valor decimal [%f]\n", m);
    printf("Uma cadeia de caracteres: [%s]\n", s);

E vai te ajudar a entender, espero. Se não, continue perguntando aqui.

 

ClassificaAluno()

 

Em relação a essa função, talvez ache melhor ela retornar apenas o texto da classificação do aluno a partir da média e do número de faltas, certo?  Assim você pode usar direto num printf() em main() como imagino ser o que quer. Como?

  • Ao invés da função retornar char, uma única letra, retorne char* e pode retornar a string todinha já pronta.
  • Como estourar o limite de faltas reprova de qualquer maneira, considere que é mais simples testar isso primeiro, ao invés de se preocupar com a média ao mesmo tempo. É a realidade: estourou em faltas, adeus :( 
  • Pode declarar as strings direto na função todas juntas, assim fica mais fácil de conferir ou alterar algo

Eis um exemplo:

char* ClassificaAluno(float media, int faltas)
{
    char* aprovado_louvor = "APROVADO COM LOUVOR";
    char* aprovado = "APROVADO";
    char* reprovado = "REPROVADO";
    char* reprovado_faltas = "REPROVADO POR FALTAS";

    if (faltas>10)    return reprovado_faltas;
    if (media<7)      return reprovado;
    if (media<9.5)    return aprovado;

    return aprovado_louvor;

}    // end ClassificaAluno()

Talvez concorde que é muito mais simples e legível. Não precisa de else ou testar media e faltas ao mesmo tempo: apenas retorne quando achar a resposta. Um return é exatamente isso. E provavelmente assim fica mais fácil de ler, muito mais fácil porque descreve simplesmente a realidade: mais de 10 faltas? reprovado por faltas.Se não foi reprovado por faltas mas não conseguiu nota 7, reprovado. Se não conseguiu ao menos 9.5, aprovado. Mas se conseguiu, parabens: aprovado com louvor. Só isso.

 

O printf() do resultado da função:

    printf
    (
        "Media %f com %d faltas: resultado '%s'\n", 
        media, 
        faltas, 
        ClassificaAluno(media, faltas)
    );

Simples. E mostra para media 8.5 e 5 faltas

Media 8.500000 com 5 faltas: resultado 'APROVADO'

As aspas em torno do resultado são o resultado de '%s' no printf() e servem só para destacar o resultado e tambem para testar... se imprimisse apenas o valor e estivesse em branco não saberia o que aconteceu, mas usando as aspas veria as duas em seguida e saberia que a string estava em branco...


 

#include <stdio.h>

char* ClassificaAluno(float media, int faltas)
{
    char* aprovado_louvor = "APROVADO COM LOUVOR";
    char* aprovado = "APROVADO";
    char* reprovado = "REPROVADO";
    char* reprovado_faltas = "REPROVADO POR FALTAS";

    if (faltas>10)    return reprovado_faltas;
    if (media<7)        return reprovado;
    if (media<9.5)    return aprovado;
    return aprovado_louvor;
}    // end ClassificaAluno()

int main()
{
    float media;
    int faltas;

    int f = 4;
    float m = 5.56;
    char* s = "Umas palavras";

    printf("ClassificaAluno\n");
    printf("Um inteiro (%d)\n", f);
    printf("Um valor decimal [%f]\n", m);
    printf("Uma cadeia de caracteres: [%s]\n", s);

    printf("Media: ");
    scanf("%f", &media);
    printf("Faltas: ");
    scanf("%d", &faltas);

    printf
    (
        "Media %f com %d faltas: resultado '%s'\n", 
        media, 
        faltas, 
        ClassificaAluno(media, faltas)
    );
    return 0;
}

E mostra isso na tela 

ClassificaAluno
Um inteiro (4)
Um valor decimal [5.560000]
Uma cadeia de caracteres: [Umas palavras]
Media: 9.2
Faltas: 9
Media 9.200000 com 9 faltas: resultado 'APROVADO'
  • As primeiras 4 linhas são,. claro, testes para ajudar a entender o printf()
  • Um printf() antes de cada scanf() está lá para que o usuário tenha uma orientação do que está acontecendo

IMPORTANTE: escreva ClassificaAluno() antes de usar. O compilador precisa saber o que cada função retorna e a lista de argumentos ao compilar o programa e encontrar uma chamada a ela...

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!