Ir ao conteúdo

Posts recomendados

Postado

A organização de um evento esportivo deseja um programa que faça a leitura do nome e a pontuação de cada um dos 10 participantes e exiba o nome do vencedor. Elabore este programa.


<

#include <stdio.h>


int main(void) {
    int cont, x=0;
    float pont1, pontM, pontMaior;
    char nome1[10], nomeM[10], campeao[10];

            printf("Insira o nome do atleta: .\n");
            scanf("%s", &nome1);
            printf("Insira a pontuacao do atleta: \n");
            scanf("%.2f", &pont1);

   for(cont=1;cont<=10;cont++){
            printf("Insira o nome do atleta: .\n");
            scanf("%s", nomeM);
            printf("Insira a pontuacao do atleta: \n");
            scanf("%.2f", pontM);
   }
             if(pontM>pont1){
                   campeao==nomeM;
                   pontMaior==pontM;
                }
                else{
                    campeao==nome1;
                    pontMaior==pont1;
                }
                x= x + 1;

                printf("/nO seu campeao e: %s, com a pontuacao de: %.2f. Parabens!!", campeao, pontMaior);

    return 0;

 

  • Obrigado 1
Postado

@Ana Caroline Ferreira    alguns erros , estão comentados no código ,  então seu código poderia ser assim   :

#include <stdio.h>
#include <iostream>
int main(){
    int cont, x=0;
    float pont1, pontM[10], pontMaior;/* pontM precisa ser hum vetor */
    char nome1[10],campeao[30];/* string */
    char nomeM[10][30];/* vetor de string*/
    printf("Insira o nome do atleta: ");
    fflush(stdin);
    scanf("%s",nome1);/* não precisa desse   &   pois é string */
    printf("Insira a pontuacao do atleta: ");
    fflush(stdin);
    scanf("%f",&pont1);/* só precisa do f mesmo pois a formatação será na hora de imprimir */
    for(cont=0;cont<10;cont++){/* vetor começa em zero */
        printf("Insira o nome do atleta: ");
        fflush(stdin);
        scanf("%s",nomeM[cont]);/* faltou colcar a posição do vetor */
        printf("o nome -> %s\n",nomeM[cont]);
        printf("Insira a pontuacao do atleta: ");
        fflush(stdin);/* limpar o buffer do teclado , senão pula um scanf */
        scanf("%f",&pontM[cont]);/* faltou colcar o & e a posição do vetor */
        if( ! cont ){
            pontMaior=pontM[0];
            strcpy(campeao,nomeM[0]);
        }
        if( pontMaior<pontM[cont]){
            pontMaior = pontM[cont];
            strcpy(campeao,nomeM[cont]);
        }
    }
    /*if(pontM>pont1){  // erros !
        campeao==nomeM;
        pontMaior==pontM;
    }
    else{
        campeao==nome1;
        pontMaior==pont1;
    }
    x= x + 1;*/
    printf("\nO seu campeao eh : %s, com a pontuacao de: %.2f  . Parabens ! !\n\n\n",
           campeao,pontMaior);/* barra n " \ " e não " / " */
    return 0;
}

 

  • Curtir 3
Postado

Um outro exemplo sem usar vetor:

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

int main() {
    char nome[10] = "";
    char nomeCampeao[10] = "";

    int ponto = 0;
    int pontoCampeao = -1000;

    const int quantidade = 10;
    
    for(int i = 0; i < quantidade; ++i) {
        printf("Nome do atleta: ");
        scanf("%s", nome);
        printf("Pontuação do %s: ", nome);
        scanf("%i", &ponto);

        if (ponto > pontoCampeao) {
            strcpy(nomeCampeao, nome);
            pontoCampeao = ponto;
        }
    }

    printf("Campeão: %s com %i pontos. \n", nomeCampeao, pontoCampeao);
    return 0;
}

 

  • Obrigado 1
Postado

OBS: Com respeito a questão do uso do comando fflush(stdin); para limpar o buffer, o mesmo não é nada adequado para o buffer do teclado, pois terá um comportamento "indefinido", logo, fazer uso desse comando, para o caso mencionado, não é nada recomendado

Já passei aqui no fórum várias vezes duas funções que podem ser usadas para esse fim (limpar o buffer):

void limpar_linha() {
    scanf("%*[^\n]"); // essa diretriz lê qualquer valor indesejado (sujeira), exceto o '\n', e descarta os mesmo(s)
    scanf("%*c"); // essa lê o caractere '\n" e também descarta o mesmo, limpando assim o buffer por completo
}

E essa que foi criada por um colega aqui do fórum mesmo, @isrnick:

void fflush_stdin() {
    char c;
    while ((c = getchar()) != '\n' && c != EOF); // aqui nada mais é do que fazer uso da função getchar() em um loop
}

Recomendo fortemente evitar o comando fflush(stdin);. A função fflush é recomendada para o buffer de saída, nesse caso seria fflush(stdout); (por exemplo) ou como argumento o nome de um arquivo

 

Ficam aí duas funções que limpam de forma correta e adequada a sujeira do buffer 😉

 

Essa é só uma dica, ok?

 

Segue uma vídeo-aula que explica melhor e muito bem sobre "limpar o buffer do teclado":

https://programacaodescomplicada.wordpress.com/2013/01/08/aula-81-limpar-o-buffer/

Só vale lembrar que, como foi comentado aqui há um bom tempo atrás, a função mencionada no vídeo também não é recomendada

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...