Ir ao conteúdo
  • Cadastre-se

C Erro ftoa não definido


kisne

Posts recomendados

Esto desenvolvendo para fim didático uma interface que calcula um capacitor e indutor pra me dar o valor da frequência no código bota para fazer a transformação de string para ponto flutuante depois de volta para string no meu código vem esses erros

C:\Users\Kisne\AppData\Local\Temp\cc1sZSvM.o    Calculos eletronicos e eletricos.c:(.text+0x433): undefined reference to `_imp__GetStockObject@4'
C:\Users\Kisne\AppData\Local\Temp\cc1sZSvM.o    Calculos eletronicos e eletricos.c:(.text+0x46b): undefined reference to `_imp__GetStockObject@4'
C:\Users\Kisne\AppData\Local\Temp\cc1sZSvM.o    Calculos eletronicos e eletricos.c:(.text+0x4a3): undefined reference to `_imp__GetStockObject@4'
C:\Users\Kisne\AppData\Local\Temp\cc1sZSvM.o    Calculos eletronicos e eletricos.c:(.text+0x4db): undefined reference to `_imp__GetStockObject@4'
C:\Users\Kisne\AppData\Local\Temp\cc1sZSvM.o    Calculos eletronicos e eletricos.c:(.text+0x62f): undefined reference to `ftoa'
C:\Users\Kisne\Documents\Novos projetos c\collect2.exe    [Error] ld returned 1 exit status

 

aqui está meu código, pelo amor de Deus alguém pode me da um alô.

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

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
{
    HWND hwnd;              
    MSG messages;          
    WNDCLASSEX wincl;        

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = "WindowsApp";
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;          
    wincl.cbSize = sizeof (WNDCLASSEX);

    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL; 
    wincl.cbClsExtra = 0;  
    wincl.cbWndExtra = 0;  
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    if (!RegisterClassEx (&wincl))
        return 0;

    hwnd = CreateWindowEx (
        0,                 
        "WindowsApp",        
        "Calculadora",       
        WS_OVERLAPPEDWINDOW, 
        350,      
        250,      
        320,               
        300,               
        HWND_DESKTOP,    
        NULL,              
        hThisInstance,      
        NULL                
        );

    ShowWindow (hwnd, nFunsterStil);

    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    
    return messages.wParam;
}

#define ID_BUTTONok 1001

HINSTANCE g_inst;
HWND EditNum1,EditNum2,EditTotal,ButtonOk;

void DesenharObjectos(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    EditNum1 = CreateWindowEx (
        WS_EX_CLIENTEDGE,"EDIT","",       
        WS_VISIBLE|WS_CHILD|WS_BORDER|ES_RIGHT , 
        20, 30, 100, 20,                 
        hwnd,NULL,g_inst,NULL);
           
    EditNum2 = CreateWindowEx (
        WS_EX_CLIENTEDGE,"EDIT", "",       
        WS_VISIBLE|WS_CHILD|WS_BORDER, 
        20, 50, 100, 20,                
        hwnd, NULL, g_inst, NULL );

    EditTotal = CreateWindowEx (
        WS_EX_CLIENTEDGE,"EDIT", "",       
        WS_VISIBLE|WS_CHILD|WS_BORDER, 
        160, 30, 100, 20,                
        hwnd, NULL, g_inst, NULL );

    CreateWindowEx (
        0,"STATIC","H",       
        WS_VISIBLE|WS_CHILD, 
        5, 30, 10, 20,                
        hwnd,NULL,g_inst,NULL);
           
    CreateWindowEx (
        0, "STATIC", "C",       
        WS_VISIBLE|WS_CHILD, 
        5, 50, 10, 20,             
        hwnd,NULL,g_inst, NULL);
           
    ButtonOk = CreateWindowEx (
        0, "BUTTON", "OK",       
        WS_VISIBLE|WS_CHILD, 
        120, 30, 40, 40,             
        hwnd,(HMENU)ID_BUTTONok, g_inst, NULL);
    
    SendMessage((HWND) EditNum1,(UINT) WM_SETFONT,(WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);	  
           
    SendMessage((HWND) EditNum2,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);	
    SendMessage((HWND) EditTotal,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);	
    
    SendMessage((HWND) ButtonOk,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);	       	
}

char s_valor1[20] = "0", s_valor2[20] = "0", s_total[20] = "0";
float valor1, valor2, total;

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_CREATE: 
            DesenharObjectos(hwnd,message,wParam,lParam);
        break;    
        case WM_COMMAND:
            
            if ((HIWORD(wParam) == BN_CLICKED))
            {   
                
                SendMessage((HWND)EditNum1,(UINT)EM_GETLINE,(WPARAM)1,(LPARAM) &s_valor1); 
                     
                SendMessage((HWND)EditNum2,(UINT)EM_GETLINE,(WPARAM)1,(LPARAM) &s_valor2);
                 
               	valor1 = atof(s_valor1);
                valor2 = atof(s_valor2); 
                 
                switch (LOWORD(wParam))
                {
                    case ID_BUTTONok:  
                        total = (1/(6.28*(sqrt(valor1 * valor2))));
                    break;
                   
                }    
                
                total = ftoa(s_total);
                     
                SendMessage(
	                (HWND) EditTotal,
	                (UINT) WM_SETTEXT, 
	                (WPARAM) 0,
	                (LPARAM) &s_total
                    );
                    
            }   
            break;
        case WM_DESTROY:
            PostQuitMessage (0);
        break;
        default:                     
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

 

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

@kisne

3 horas atrás, kisne disse:

interface que calcula um capacitor e indutor pra me dar o valor da frequencia

Confuso...

Seria um circuito LC ou o que?

 

Aliás, é possível editar o texto de todas as editbox, inclusive a do resultado.

image.png.23edbff0681beed14ce163db86a083a4.png

Talvez você pudesse adicionar o estilo ES_READONLY para que o usuário não possa editar o que não deve.

Adicione também algumas informações aí na janela para saber de que se trata essa calculadora.

 

E como @kgin disse, chamou uma tal ftoa() em vez da atof().

 

3 horas atrás, kisne disse:

no meu código vem esses erros

Compilou usando o que?

Aqui funcionou normalmente, mas não entendi ainda o que está sendo calculado :D

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

Dei uma olhada aqui de novo é o programa está chamando a função GetStockObject() da biblioteca GDI sem acrescentar o cabeçalho gdi.h (isso depende do compilador, no freepascal é só gdi).

 

Fora que eu acho que tem que acrescentar algumas linhas na compilação, como -gdi, ou -gdi+, e -D UNICODE para evitar a codificação do Windows.

 

54 minutos atrás, Lucca Rodrigues disse:

Compilou usando o que?

Aqui funcionou normalmente, mas não entendi ainda o que está sendo calculado 

Provavelmente usando o mingw, se você consegui compilar aí aproveite e passe a configuração do compilador que você usou para ele.

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

@kisne    sim o erro é nessa função ftoa , que você colocou ,  creio que você está tentando converter um número com casas decimais , float  ou double , para char string ,  como nesse código originaL ,  desse site :

interface Gráfica em C

que usa a função   itoa  ,     mas nem todos os compiladores a aceitam , pois ela não faz parte da ANSI   , como é informado nesse link :

Função itoa em C++

então acrescente essa função criada pelo usuário  lá no início de seu programa , e ele vai compilar e rodar , porém  aqui ela não faz nada mesmo , pois precisa programar uma solução para realizar essa conversão de float para string , que você Quer  ,

char ftoa(float n, char str[], int b)
{
    char temp[100],ax;
    while( 1)
    {
        /// pegar cada digito do número
        /// e converter ele para um char 
        /// da tabela ASCII
        /// removendo 48 de seu valor
        /// e depois concatenar em outra string char
        /// usando strcat
        break;
    }
}

e faça a configuração do compilador para esses cabeçalhos  , aqui no codeblock :

codeblock.jpg.84a24fc556afc773a28bb3d2ab5feafb.jpg

Link para o comentário
Compartilhar em outros sites

18 minutos atrás, kgin disse:

Provavelmente usando o mingw, se você consegui compilar aí aproveite e passe a configuração do compilador que você usou para ele.

Pelo Code:Blocks, os comandos adicionados às opções de linker ao criar um projeto Win32 GUI Project são por padrão -lgdi32 -luser32 -lkernel32 -lcomctl32. Se há um diferencial, provavelmente seria este.

No mais, estou usando Debug mode, etc...

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

@kisne     se você estiver usando o codeblock pode configurar o linker do compilador e usar esse seu código ,  junto com a função   "ftoa" que converte float para string , e mais algumas modificações :

#define _WIN32_WINNT 0x0500  /* tem ficar aqui na primeira linha */
#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif
/*
    para rodar e compilar bem coloque essas configurações
    no codeblock ou dev c++, em settings / linker
    -lgdi32
    -lws2_32

*/
#define  ID_BUTTONok 1001
#include <tchar.h>
#include <Windows.h>
#include <Windows.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
char ftoa(float , char *, int);
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char s_valor1[20] = "0", s_valor2[20] = "0", s_total[20] = "0",
ret[100];
float valor1, valor2, total;
HINSTANCE g_inst;
HWND EditNum1,EditNum2,EditTotal,ButtonOk;
int WINAPI WinMain
(
    HINSTANCE hThisInstance,
    HINSTANCE hPrevInstance,
    LPSTR     lpszArgument ,
    int       nFunsterStil
)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = "WindowsApp";
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);

    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND + 6;
    if (!RegisterClassEx (&wincl))
        return 0;
    hwnd = CreateWindowEx
    (
        0,
        "WindowsApp",
        "Calculadora LC",
        WS_OVERLAPPEDWINDOW,
        350,  /// pos coluna na tela
        250,  /// pos linha na tela
        400,  /// largura da janela
        300,  /// altura da janela
        HWND_DESKTOP,
        NULL,
        hThisInstance,
        NULL
    );
    ShowWindow (hwnd, nFunsterStil);
    hwnd = GetConsoleWindow();
    ShowWindow( hwnd, SW_MINIMIZE );
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    ShowWindow( hwnd, SW_MAXIMIZE );
    return messages.wParam;
}
void DesenharObjectos(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    EditNum1 = CreateWindowEx   /// janala onde inserir o 1º numero
    (
        WS_EX_CLIENTEDGE,"EDIT","  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER|ES_CENTER,
        40, 30, 100, 30,
        hwnd,NULL,g_inst,NULL
    );
    EditNum2 = CreateWindowEx  /// janela onde inserir o 2º numero
    (
        WS_EX_CLIENTEDGE,"EDIT", "  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER | ES_CENTER,
        40, 80, 100, 30,
        hwnd, NULL, g_inst, NULL
    );
    EditTotal = CreateWindowEx   //// janela onde apresentarah o resultado
    (
        WS_EX_CLIENTEDGE,"EDIT", "  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER | ES_CENTER,
        200, 30, 100, 30,
        hwnd, NULL, g_inst, NULL
    );
    CreateWindowEx
    (
        0,"STATIC"," H ",
        WS_VISIBLE|WS_CHILD,
        5, 30, 30, 30,
        hwnd,NULL,g_inst,NULL
    );
    CreateWindowEx
    (
        0, "STATIC", " C ",
        WS_VISIBLE|WS_CHILD,
        5, 80, 30, 30,
        hwnd,NULL,g_inst, NULL
    );
    ButtonOk = CreateWindowEx
    (
        0, "BUTTON", " OK ",
        WS_VISIBLE|WS_CHILD,
        150, 40, 40, 40,
        hwnd,(HMENU)ID_BUTTONok,
        g_inst, NULL
    );
    SendMessage((HWND) EditNum1 ,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) EditNum2 ,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) EditTotal,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) ButtonOk ,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
}
LRESULT CALLBACK WindowProcedure
(
    HWND   hwnd   ,
    UINT   message,
    WPARAM wParam ,
    LPARAM lParam
)
{
    static TCHAR frase[] = _T("Tecle ESC Para Sair !");
    switch ( message )
    {
    case WM_CREATE:
        DesenharObjectos(hwnd,message,wParam,lParam);
        break;
    case WM_KEYDOWN:
        if (wParam == VK_ESCAPE){
            PostQuitMessage (0) ;
            return 0 ;
        }
        break;
    case WM_PAINT :
        HDC tela;
        PAINTSTRUCT ps ;
        tela = GetDC (hwnd) ;
        tela = BeginPaint (hwnd, &ps) ;
        TextOut(tela, 120, 240, frase, _tcslen(frase));
        EndPaint (hwnd, &ps) ;
        break;
    case WM_COMMAND:
        if ( ( HIWORD( wParam ) == BN_CLICKED ) )
        {
            SendMessage( ( HWND ) EditNum1,( UINT )EM_GETLINE,( WPARAM )1,( LPARAM ) & s_valor1 );/// getline pega o valor digitado
            SendMessage( ( HWND ) EditNum2,( UINT )EM_GETLINE,( WPARAM )1,( LPARAM ) & s_valor2 );/// getline pega o valor digitado
            valor1 = atof( s_valor1 );  /// converte de string para float
            valor2 = atof( s_valor2 );  /// converte de string para float
            switch (LOWORD(wParam))
            {
            case ID_BUTTONok:
                total = (1/(6.28*(sqrt(valor1 * valor2))));
                break;
            }
            ftoa(total,s_total,10); /// 3 parametros o numero  o buffer  em qual base: DecimaL  OctaL  HexadecimaL
            SendMessage
            (
                (HWND)   EditTotal ,
                (UINT)   WM_SETTEXT,
                (WPARAM) 0         ,
                (LPARAM) &s_total
            );
        }
        break;
    case WM_DESTROY:
        PostQuitMessage (0);
    break;
    default:
        return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}
char ftoa(float f, char *str, int b)
{

    int z=0,it = (int)f,
    vet[100],i,c=0;
    f -= it;
    while(it >= 10 )
    {
        vet[z] = it % 10;
        it /= 10;
        z++;
    }
    vet[z] = it;
    while(z >= 0)
    {
        str[c] = (char)(vet[z]+48);
        c++;
        z--;
    }
    str[c] = '.';       /// ponto como separador de casas decimais
    c++;
    for(i=0; i<10; i++) /// para dez casas decimais
    {
        f *= 10;
        it = (int)f;
        f -= it;
        str[c] = (char)(it+48);
        c++;
    }
    str[c] = '\0';
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Em 29/07/2021 às 19:55, Lucca Rodrigues disse:

@kisne

Confuso...

Seria um circuito LC ou o que?

 

Aliás, é possível editar o texto de todas as editbox, inclusive a do resultado.

image.png.23edbff0681beed14ce163db86a083a4.png

Talvez você pudesse adicionar o estilo ES_READONLY para que o usuário não possa editar o que não deve.

Adicione também algumas informações aí na janela para saber de que se trata essa calculadora.

 

E como @kgin disse, chamou uma tal ftoa() em vez da atof().

 

Compilou usando o que?

Aqui funcionou normalmente, mas não entendi ainda o que está sendo calculado :D

um circuito oscilado usando capacitor e um indutor 

Em 31/07/2021 às 06:53, devair1010 disse:

@kisne     se você estiver usando o codeblock pode configurar o linker do compilador e usar esse seu código ,  junto com a função   "ftoa" que converte float para string , e mais algumas modificações :

#define _WIN32_WINNT 0x0500  /* tem ficar aqui na primeira linha */
#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif
/*
    para rodar e compilar bem coloque essas configurações
    no codeblock ou dev c++, em settings / linker
    -lgdi32
    -lws2_32

*/
#define  ID_BUTTONok 1001
#include <tchar.h>
#include <Windows.h>
#include <Windows.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
char ftoa(float , char *, int);
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char s_valor1[20] = "0", s_valor2[20] = "0", s_total[20] = "0",
ret[100];
float valor1, valor2, total;
HINSTANCE g_inst;
HWND EditNum1,EditNum2,EditTotal,ButtonOk;
int WINAPI WinMain
(
    HINSTANCE hThisInstance,
    HINSTANCE hPrevInstance,
    LPSTR     lpszArgument ,
    int       nFunsterStil
)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = "WindowsApp";
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);

    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND + 6;
    if (!RegisterClassEx (&wincl))
        return 0;
    hwnd = CreateWindowEx
    (
        0,
        "WindowsApp",
        "Calculadora LC",
        WS_OVERLAPPEDWINDOW,
        350,  /// pos coluna na tela
        250,  /// pos linha na tela
        400,  /// largura da janela
        300,  /// altura da janela
        HWND_DESKTOP,
        NULL,
        hThisInstance,
        NULL
    );
    ShowWindow (hwnd, nFunsterStil);
    hwnd = GetConsoleWindow();
    ShowWindow( hwnd, SW_MINIMIZE );
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    ShowWindow( hwnd, SW_MAXIMIZE );
    return messages.wParam;
}
void DesenharObjectos(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    EditNum1 = CreateWindowEx   /// janala onde inserir o 1º numero
    (
        WS_EX_CLIENTEDGE,"EDIT","  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER|ES_CENTER,
        40, 30, 100, 30,
        hwnd,NULL,g_inst,NULL
    );
    EditNum2 = CreateWindowEx  /// janela onde inserir o 2º numero
    (
        WS_EX_CLIENTEDGE,"EDIT", "  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER | ES_CENTER,
        40, 80, 100, 30,
        hwnd, NULL, g_inst, NULL
    );
    EditTotal = CreateWindowEx   //// janela onde apresentarah o resultado
    (
        WS_EX_CLIENTEDGE,"EDIT", "  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER | ES_CENTER,
        200, 30, 100, 30,
        hwnd, NULL, g_inst, NULL
    );
    CreateWindowEx
    (
        0,"STATIC"," H ",
        WS_VISIBLE|WS_CHILD,
        5, 30, 30, 30,
        hwnd,NULL,g_inst,NULL
    );
    CreateWindowEx
    (
        0, "STATIC", " C ",
        WS_VISIBLE|WS_CHILD,
        5, 80, 30, 30,
        hwnd,NULL,g_inst, NULL
    );
    ButtonOk = CreateWindowEx
    (
        0, "BUTTON", " OK ",
        WS_VISIBLE|WS_CHILD,
        150, 40, 40, 40,
        hwnd,(HMENU)ID_BUTTONok,
        g_inst, NULL
    );
    SendMessage((HWND) EditNum1 ,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) EditNum2 ,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) EditTotal,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) ButtonOk ,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
}
LRESULT CALLBACK WindowProcedure
(
    HWND   hwnd   ,
    UINT   message,
    WPARAM wParam ,
    LPARAM lParam
)
{
    static TCHAR frase[] = _T("Tecle ESC Para Sair !");
    switch ( message )
    {
    case WM_CREATE:
        DesenharObjectos(hwnd,message,wParam,lParam);
        break;
    case WM_KEYDOWN:
        if (wParam == VK_ESCAPE){
            PostQuitMessage (0) ;
            return 0 ;
        }
        break;
    case WM_PAINT :
        HDC tela;
        PAINTSTRUCT ps ;
        tela = GetDC (hwnd) ;
        tela = BeginPaint (hwnd, &ps) ;
        TextOut(tela, 120, 240, frase, _tcslen(frase));
        EndPaint (hwnd, &ps) ;
        break;
    case WM_COMMAND:
        if ( ( HIWORD( wParam ) == BN_CLICKED ) )
        {
            SendMessage( ( HWND ) EditNum1,( UINT )EM_GETLINE,( WPARAM )1,( LPARAM ) & s_valor1 );/// getline pega o valor digitado
            SendMessage( ( HWND ) EditNum2,( UINT )EM_GETLINE,( WPARAM )1,( LPARAM ) & s_valor2 );/// getline pega o valor digitado
            valor1 = atof( s_valor1 );  /// converte de string para float
            valor2 = atof( s_valor2 );  /// converte de string para float
            switch (LOWORD(wParam))
            {
            case ID_BUTTONok:
                total = (1/(6.28*(sqrt(valor1 * valor2))));
                break;
            }
            ftoa(total,s_total,10); /// 3 parametros o numero  o buffer  em qual base: DecimaL  OctaL  HexadecimaL
            SendMessage
            (
                (HWND)   EditTotal ,
                (UINT)   WM_SETTEXT,
                (WPARAM) 0         ,
                (LPARAM) &s_total
            );
        }
        break;
    case WM_DESTROY:
        PostQuitMessage (0);
    break;
    default:
        return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}
char ftoa(float f, char *str, int b)
{

    int z=0,it = (int)f,
    vet[100],i,c=0;
    f -= it;
    while(it >= 10 )
    {
        vet[z] = it % 10;
        it /= 10;
        z++;
    }
    vet[z] = it;
    while(z >= 0)
    {
        str[c] = (char)(vet[z]+48);
        c++;
        z--;
    }
    str[c] = '.';       /// ponto como separador de casas decimais
    c++;
    for(i=0; i<10; i++) /// para dez casas decimais
    {
        f *= 10;
        it = (int)f;
        f -= it;
        str[c] = (char)(it+48);
        c++;
    }
    str[c] = '\0';
    return 0;
}

 

sim, eu uso o dev c++ 

 

Em 29/07/2021 às 20:54, devair1010 disse:

@kisne    sim o erro é nessa função ftoa , que você colocou ,  creio que você está tentando converter um número com casas decimais , float  ou double , para char string ,  como nesse código originaL ,  desse site :

interface Gráfica em C

que usa a função   itoa  ,     mas nem todos os compiladores a aceitam , pois ela não faz parte da ANSI   , como é informado nesse link :

Função itoa em C++

então acrescente essa função criada pelo usuário  lá no início de seu programa , e ele vai compilar e rodar , porém  aqui ela não faz nada mesmo , pois precisa programar uma solução para realizar essa conversão de float para string , que você Quer  ,

char ftoa(float n, char str[], int b)
{
    char temp[100],ax;
    while( 1)
    {
        /// pegar cada digito do número
        /// e converter ele para um char 
        /// da tabela ASCII
        /// removendo 48 de seu valor
        /// e depois concatenar em outra string char
        /// usando strcat
        break;
    }
}

e faça a configuração do compilador para esses cabeçalhos  , aqui no codeblock :

codeblock.jpg.84a24fc556afc773a28bb3d2ab5feafb.jpg

valeu ai pela ajuda, eu uso o dev c++

  • Curtir 1
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...