Ir para conteúdo
Fórum Script Brasil
  • 0

Structs


Tripa_seca

Pergunta

Como faria para mudar o valor de um retângulo e um quadrado numa mesma função?

#include<iostream.h>

struct retangulo

{

int largura;

int altura;

};

struct quadrado

{

int altura;

};

void tam(retangulo rect)

{

cout << rect.largura;

rect.largura += 1;

cout << rect.largura;

//aqui gostaria de mudar o valor da altura do quadrado para r2+=1

};

int main()

{

retangulo r1;

quadrado r2;

cout << "Digite o valor da largura do retangulo: ";

cin >> r1.largura;

cout << "Digite o valor da altura do retangulo: ";

cin >> r1.altura;

cout << "Digite o valor da altura do quadrado: ";

cin >> r2.altura;

tam(r1);

system("pause");

return 1;

};

Olha so... eu tava fazendo um joguinho com struct so que tive um problema... o player informa o nome so que depois quando tento acessar o valor dele continua zerado:

#include<iostream.h>

struct jogador

{

char nome[20];

int level;

int exp;

int hp;

int hp_max;

int mana;

int mana_max;

};

void novo_nome(jogador player)

{

cout << "Digite o nome para o player: ";

cin.getline(player.nome,10);

cout << "Seu novo nome e " << player.nome << "\n";

system("pause");

system("cls");

};

void menu(jogador player)

{

cout << player.nome << "\n";

cout << "\nHP : " << player.hp << "/" << player.hp_max;

cout << "\nMP : " << player.mana << "/" << player.mana_max;

cout << "\n\n\n\t\tO que deseja fazer?\n\t1-";

system("pause");

};

int main()

{

jogador player;

cout << "Chok Versao 0.1\n\n";

system("pause");

system("cls");

novo_nome(player);

player.hp = 50;

player.hp_max = 50;

player.mana = 10;

player.mana_max = 10;

player.exp = 0;

player.level = 1;

menu(player);

system("pause");

return 1;

};

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Resposta da primeira pergunta: veja um exemplo meu:

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

struct A
{
       int z;
};

struct B
{
       int z;
};

//Repare a função 'Modify'
void Modify(A *p)
{
     p->z = 22;
}

void Modify(B *p)
{
     p->z = 45;
}

int main()
{
    A myA;
    B myB;
    Modify(&myA);
    Modify(&myB);
    printf("Hello World!! %d - %d\n", myA.z, myB.z);
    system("pause");
    return 0;
}
No caso, existe duas definições para uma função, mas a definição correta é chamada de acordo com o tipo de dados dos argumentos, ou mesmo a quantidade de argumentos. Outro exemplo:
int Sum(int a, int b)
{
    return a + b;
}

float Sum(float a, float b)
{
    return a + b;
}
Respondendo a segunda pergunta: 'player' está sendo passado como valor, e não referência. Ou seja, uma cópia da estrutura é passada para a função, mas não seu endereço para a alteração do nome do jogador. Para atender seu propósito:
// Função jogador
void novo_nome(jogador *player)
{
cout << "Digite o nome para o player: ";
cin.getline(player->nome,10);
cout << "Seu novo nome e " << player->nome << "\n";
system("pause");
system("cls");
};

//Main
int main()
{
jogador player;
cout << "Chok Versao 0.1\n\n";
system("pause");
system("cls");
novo_nome(&player); //End. da estrutura alocada
.
.
.
}

OBS. final: não retorne 1 em 'main', pois isso é entendido como uma execução não completada com sucesso. Retirne 0, que significa execução com sucesso.

Falows!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...