Ir ao conteúdo
  • Cadastre-se

C++ qual erro do meu algoritmo?


Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!