Ir ao conteúdo
  • Cadastre-se

C++ Como salvar Y Nomes (string) com X caracteres


Posts recomendados

Boa tarde, pessoal.

 

Estou fazendo um programa e preciso que a pessoa digite um nome, como por exemplo 'mimosa', e, depois de digitar outros dados referente ao nome 'mimosa', o programa volta novamente ao estágio onde a pessoa digita outro nome e coloca outros dados referentes a esse nome para que no final o programa utilize os dados dos nomes para falar quem é maior ou coisa assim (comparar os dados das strings).

 

Meu programa atual apresenta problema na hora que eu digito um nome com mais de 1 caractere. Por exemplo: caso eu digite 2 caracteres ele vai do dado 1 para o dado 3, ou seja, pula a quantidade de caracteres da string.

 

Minha outra dificuldade é referente a pessoa digitar 'FIM'. Eu cheguei a utilizar a função "strcmp(NOME,"FIM");", mas não deu certo, pois o programa não para quando digito FIM.

 

Exemplo prático 1:

 

//dado 1
Mimosa //string com 6 caracteres e posição 0

150 Kg

11 anos

 

//roda de novo

 

//dado 2

Bezerro //string com 7 caracteres e posição 1

80 Kg

6 anos

 

//final

 

Programa mostra quem é mais pesado e qual o peso

 

FIM;

 

Exemplo prático de como ele está atualmente:

 

//dado 1
Mimosa //string com 6 caracteres e posição 0

150 Kg //o programa vai pra posição 6 (aqui está o problema) na hora de por o peso

11 anos

 

//final

 

Programa mostra quem é mais pesado e qual o peso

 

FIM;

 

 

Meu programa está assim:

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

   int main()
   {
      int PESO[80],IDADE[80],i,S,MED,C,MA,NO;
      char NOME[80];
      
      //pra ver o maior peso
      MA = -1;
  
      //variavel pra mostrar o nome do boi mais pesado no final
      NO = 0;
  
      //variavel referente ao numero do dado (gravarei mais de 1 dado)
      i = 1;
  
      //variavel pra somar todos os pesos
      S = 0;
  
      //contador de bois com +10 anos
      C = 0;
      
      printf("Bem Vindo ao Boiadeiro 2k.\n");
      printf("\nIMPORTANTE: Para sair, digite 'F' no nome do boi (tudo maisuculo)!\n");
      printf("\nPressione enter para continuar.");
      
      getch();
      
      system("cls");
      
      do 
      {
          printf("Digite o nome do boi numero %d:\n",i);
          scanf(" %c",&NOME[i]);
          printf("\nDigite o peso deste boi:\n");
          scanf(" %d",&PESO[i]);
          printf("\nDigite a idade deste boi:\n");
          scanf(" %d",&IDADE[i]);
          
          S = S + PESO[i];
          
          if( IDADE[i] >= 10 )
          {
             C = C + 1;
          }
          
          i = i + 1;
              
          system("cls");
          
      } while(i != 80 && strcmp(NOME,"FIM") == false);
                         //aqui esta o outro problema
      
      for(i=1; i<=80 ; i++)
      {
         if(PESO[i] >= MA)
         {
            MA = PESO[i];
            NO = i;
         }
      }
      
      printf("O boi de nome %c pesa mais que todos e apresenta %d Kg\n",NOME[NO],MA);
      
      //media do peso do rebanho
      MED = S/(i-1);
      
      printf("\nA media do peso do rebanho e:\n%d",MED);
      printf("\n\nNo rebanho, ha %d boi(s) com mais de 10 anos",C);
      
      getch();
   
   }

 

Link para o comentário
Compartilhar em outros sites

@Gian Dias Campos Ao usar %c no scanf e índice no vetor de char(string), você não permitiu a entrada de uma string:

          printf("Digite o nome do boi numero %d:\n",i);
          scanf(" %c",&NOME); //<--- use %s em vez de %c

Para usar vários dados em uma variavel, use matrizes multidimensionais, como:

char nome[100][50]; //100 nomes com 50 char(letras)
scanf("%s",nome[0]); //entrada para o indice 0 em nome, até 50 char

P.S: pode usar com int, e outros tipos.

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

Muito obrigado, @TYSQUARE89 , consegui solucionar esse problema!

 

Mas infelizmente apareceu outro :/

Agora eu estou com dificuldade em assimilar o boi com maior peso com o nome dele... Você poderia me ajudar com a lógica?

 

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

   int main()
   {
      int PESO[5],IDADE[5],i,j,S,MED,C,MA,NO;
      char NOME[5][30];
      
      MA = -1;
      NO = 0;
      i = 0;
      S = 0;
      C = 0;
      
      printf("Bem Vindo ao Boiadeiro 2k.\n");
      printf("\nIMPORTANTE: Para sair, digite 'FIM' no nome do boi (tudo maisuculo)!\n");
      printf("\nPressione enter para continuar.");
      
      getch();
      
      system("cls");
      
      do 
      {
          printf("Digite o nome do boi numero %d:\n",i);
          scanf(" %s",NOME[i]);
          printf("\nDigite o peso deste boi:\n");
          scanf(" %d",&PESO[i]);
          printf("\nDigite a idade deste boi:\n");
          scanf(" %d",&IDADE[i]);
          
          S = S + PESO[i];
          
          if( IDADE[i] >= 10 )
          {
             C = C + 1;
          }
          
          i = i + 1;
              
          system("cls");
          
      } while(i != 2);
      
      for(i=0; i<=2-1 ; i++)
      {
         if(PESO[i] >= MA)
         {
            MA = PESO[i];
            NO = i;
         }
      }
      
      printf("O boi de nome ");
      for(i = NO; j<=i; j++) //<-- o problema deve estar na primeira lógica 'i = NO'
      {
         printf("%s",NOME[j]);
      }
      printf(" pesa mais que todos e apresenta %d Kg\n",MA);
      
      MED = S/i;
      
      printf("\nA media aproximada do peso do rebanho e:\n%d",MED);
      printf("\n\nNo rebanho, ha %d boi(s) com mais de 10 anos",C);
      
      getch();
   
   }

 

Link para o comentário
Compartilhar em outros sites

Na logica, você tem o nome, peso e idade no mesmo indice i.

Então para acessar o peso do boi[0], basta usar o indice 0 em peso:

peso[0]

 

Nesse loop

//i = NO,
for(i = NO; j<=i; j++) //<-- o problema deve estar na primeira lógica 'i = NO'
{
         printf("%s",NOME[j]);
}

 

Zere a variável j , já que ela foi declarada sem valor.

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!