• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

xplode_me

[Resolvido] Transformar char em double/float

6 mensagens neste tópico

Oi!

Estou a tentar colocar o meu programazito em C a trabalhar com uma interface GTK (Gnome (Linux))...

O problema é que este procedimento:

gtk_entry_get_text(GTK_ENTRY(entry));

, devolve uma string e eu preciso que este valor seja convertido num tipo float para usar aqui:

secondsToHours(entry);

Alguma maneira de fazer isto?

Ja me falaram em sscanf :s

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

OK já consegui fazer isto funcionar.

Aqiu está o código!

ATENÇÃO: Copiei o que estava a fazer no anjuta por isso pode ter erros :D

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#include <gtk/gtk.h>
#include <math.h>
#include <stdlib.h>
#include "callbacks.h"
#include "interface.h"
#include "support.h"

float secondsToHours(float seconds)
{
float hours;
float minutes;
float horas-gtk
float minutos-gtk

hours = ((int)(seconds/3600));
minutes = ((((seconds/3600) - ((int)(seconds/3600)))*60));


printf("Já passaram, ");
printf("%.0f", hours);
printf(" horas e ");
printf("%.0f", minutes);
printf(" minutos desde o último reboot do router!\n");


	return 0;
	}


gboolean
on_window1_delete_event                (GtkWidget       *widget,
                                        GdkEvent        *event,
                                        gpointer         user_data)
{
gtk_main_quit();
  return FALSE;
}

void
on_enviar_clicked                      (GtkButton       *button,
                                        gpointer         user_data)
{
GtkWidget * entry = lookup_widget(GTK_WIDGET(button), "inicial");
GtkWidget * label = lookup_widget(GTK_WIDGET(button), "final");




/* gchar output[50]="HELLO SIRS ";
strcat(output,gtk_entry_get_text(GTK_ENTRY(entry))); */

float seconds;
seconds = atof( gtk_entry_get_text(GTK_ENTRY(entry)) );

secondsToHours(seconds);


/* gtk_label_set_text(GTK_LABEL(label),output); */
} 


void
on_limpar_clicked                      (GtkButton       *button,
                                        gpointer         user_data)
{

}

Agora precisava de mais uma ajudinha....

Eu queria que os valores das "printf("%.0f", hours);" e "printf("%.0f", minutes);" fossem atribuidos a variaveis em vez de serem imprimidos para o terminal. Alguém sabe como?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas, yah claro usa a funcao sprintf, funciona quase como o printf mas em vez de imprimir para o stdout, imprime para uma char[] que lhe das como argumento. Tem cuidado a usar pq ela assume que o teu array tem tamanho suficiente para guardar isso, se nao tiver.. BOOM! foste...

Portanto talvez seja melhor usares a snprintf

int  snprintf(char *str, size_t size, const char *format, ...);

Hasta []

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Portanto usando o sprintf:

char xpto[256];
sprintf(xpto , "%.0f" , hours);

a string xpto fica com exactamente o mesmo que seria impresso no terminal pelo printf. Mas como eu referi tem o tal problema de como nao sabes o tamanho da string que akilo vai gerar convem arranjares algo grande onde meter.

Uma muito melhor solucao é usar o snprintf pk esta funcao tem um parametro que é basicamente o numero de Bytes máximo que ela pode escrever

char xpto[256];
snprintf(xpto , 256*sizeof(char) ,  "%.0f" , hours); 

(Ou eu tou a interpretrar mal o man do snprintf ou o valor de retorno é practicamente inutil pois nao conseguimos distinguir se faltam X caracteres de espaco ou se ele escreveu X caracteres na string. Alguem me pode corrigir? Nao vou testar isto.)

Bem de kk maneira é so isto, agora como provavelmente nao keres estra string num array local o melhor que tens a fazer e dps de fazeres o snprintf ou sprintf, pegares nessa string, contares o numero de caracteres com o strlen , dps alocares uma cena com esse tamanho +1 com o malloc (ou semelhante) e dps fazeres strcpy  que te copia a string original em xpto para o espaco que alocaste.

Hasta []

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora