Go Down

Topic: concatenar int, float, char (Read 4983 times) previous topic - next topic

luisandrade

Olá pessoal tudo bem?
Estou tentando concatenar 3 tipos de dados diferentes, int, char e float, int e char eu consigo sem problemas, mas no caso do float não funciona, até consegui alguma coisa só que as casas decimais do float depois da virgula não aparecem. Se puderem me ajudar agradeço muito.

Luis andrade

bubulindo

Se pudesses colocar aqui o código que tens para podermos ajudar também ficamos agradecidos.

Já experimentaste o ftoa();
This... is a hobby.

luisandrade

Segue o codigo que inicie os testes.

int n_cocho = 1;
char tag_boi "1FI4566WD3";
float peso_cocho = 30,45;

void setup(){
Serial.begin(9600);
}

void loop(){
n_cocho =+ ", ";
n_cocho =+ tag_boi;
n_cocho =+ ", ";
n_cocho =+ peso_cocho;
Serial.print(n_cocho);
}


Edsoncan

Quando você define uma variável, você define a área ocupada, a maneira que o processador vai lidar com ela  e o tempo de criação dessa variável, isso tudo vai parar dentro de um dicionario de variáveis que o compilador usa para montar o código, os compiladores de dois passos criam isso no primeiro passo e usam para montar o código no segundo, geralmente são mais eficientes e o de um passo tentam fazer isso tudo de uma vez, por exemplo:

uma int tem 8 bits e não usa terminador "\0";
uma string tem tamanho definido pelo usuário e usa um terminador "\0"
e por ai vai,

Se você atribui a uma int um float o que o compilador vai fazer só Deus sabe......

Uma maneira mais elegante de se lidar com isso é através de struct  de uma olhada no exemplo abaixo:

#include <iostream>
#include <cstdlib>
using namespace std;

struct data {
int dia;
int mes;
int ano;
};

int main (void){
data hoje;
hoje.dia = 23;
hoje.mes = 9;
hoje.ano = 2008;
cout <<"Hoje e "<<hoje.dia<<"/"<<hoje.mes<<"/"<<hoje.ano<<endl;
system ("pause");
return EXIT_SUCCESS;
}

Veja que a struct é um modelo somente, os dados foram fisicamente criados quanto foi dado o comando data hoje, embora possam ser criados na definição da struct tambem

Edson



bubulindo

LOL

Em C, o separador decimal é um ponto e não uma vírgula...

Code: [Select]

int n_cocho = 1;
char tag_boi[] = {'1','F','I',4','5','6','6','W','D','3','\0'};
float peso_cocho = 30.45;

void setup(){
Serial.begin(9600);
}

void loop(){

Serial.print(n_cocho, DEC);
Serial.print(" ");
Serial.print(tag_boi);
Serial.print(" ");
Serial.print(peso_cocho, DEC);

//n_cocho =+ ", ";
//n_cocho =+ tag_boi;
//n_cocho =+ ", ";
//n_cocho =+ peso_cocho;
//Serial.print(n_cocho);
}


Se calhar aprender C antes de comecares a mexer com strings será o ideal. ;)
This... is a hobby.

luisandrade

Obrigado  pela dica, em relação ao separador a minha intensão é concatenar a "," para separar os dados para serem impressos todos de uma vez que serão recebidos por outro programa, bom a ideia é essa.
Serial.print(n_cocho); //1, 1FI4566WD3, 30.45

bubulindo

Code: [Select]
int n_cocho = 1;
char tag_boi[] = {'1','F','I',4','5','6','6','W','D','3','\0'};
float peso_cocho = 30.45;

void setup(){
Serial.begin(9600);
}

void loop(){

Serial.print(n_cocho, DEC);
Serial.print(", ");
Serial.print(tag_boi);
Serial.print(", ");
Serial.print(peso_cocho, DEC);

//n_cocho =+ ", ";
//n_cocho =+ tag_boi;
//n_cocho =+ ", ";
//n_cocho =+ peso_cocho;
//Serial.print(n_cocho);
}

Simples, yes?
This... is a hobby.

Radames

pode dar uma olhada na documentação do operador de soma para strings

http://arduino.cc/en/Tutorial/StringAdditionOperator
http://arduino.cc/en/Reference/String


:)


Go Up