how to pass char from the main int to a class c++?

Asked

Viewed 108 times

0

I’m struggling with how to pass a char type variable from the int main and play to a variable in the class.

Example of the way I’m trying:

 class Nome{
  private:
   char n[50];
  public:
   void set_nome();
 };

void Nome::set_nome(char nome){
n=nome;
// ou strcpy(n,nome);
}

int main(){
Nome a;
char nome[50];

scanf("%[^\n],nome);
a.set_nome(nome);
} 

1 answer

1

You are passing the "name" parameter in the wrong way. Also, although it is not a mistake, your program is not "idiomatic" C++ that is, it is not "pure" C++ it is a mixture of C++ and C.

#include <stdio.h>
#include <memory.h> // memset

class Nome
{
  private:
    char n[50];

  public:

    // void set_nome(); // <----------- ERRADO

    // funcao precisa ter um parametro, porque voce chamou com "set_nome(nome)"
    // void set_nome(char*);      // estas 3 declaracoes 
    // void set_nome(char* nome); // sao equivalente, parametro pode ter
    // void set_nome(char* xxx);  // qualquer nome, ou nao ter nome

    // colocamos "const" para deixar explicito que nao vamos alterar o parametro dentro da funcao
    void set_nome(const char*);

    // no construtor preenche "nome" com 50 zeros binarios
    Nome() { memset(n, 0, 50); }
};

// errado porque array de char tem tipo "char* ou " "char[]", "char" e' so UM caracter
// void Nome::set_nome(char nome){ // <----------- ERRADO

void Nome::set_nome(const char* nome)
{
  // n = nome;  // <------------ ERRADO
  // ou strcpy(n,nome);

  // copia no maximo 49 caracteres do parametro "nome" para "n"
  // por que 49 ? para ter certeza de vai ter pelo menos um zero binario
  // no final, ja' que no construtor preenchemos com 50 zeros binarios
  // e por que isso ? porque strings C precisam do zero binario no final
  // (strings C++ não precisam do zero binario no final)
  strncpy(n, nome, 49);ter um zero binario no final
}

int main()
{
  Nome a;
  char nome[50];

  scanf("%49[^\n]", nome); // le no maximo 49 caracteres
  printf("* nome=[%s]", nome);
  a.set_nome(nome);
}
  • Could you explain in detail the changes made to the functions , because I did not understand very well. ( The part of const char * name)( I did not constructor not to get big in the question, even so thank you I did not do so).

Browser other questions tagged

You are not signed in. Login or sign up in order to post.