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

Conversão String-Float e Float-String


Guest Malvew

Pergunta

Olá.

Estou desenvolvendo um programa basico em C, porém me deparei com uma situação desesperadora, o programa não tem erro de acordo com o compilador, porém não exibe o resultado esperado, estou desesperado e preciso URGENTE de ajuda qualquer palpite já ajuda, abaixo segue o código:

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

int main()

{

char data1[9], ano1[5], mes1[3], dia1[3];

char data2[9], ano2[5], mes2[3], dia2[3];

float TempDia=0,TempMes=0,TempAno=0,TempFinal=0;

printf("\t\t\n\nEste programa calcula o numero de dias entre duas datas ");

printf("\t\t\n\nDigite a primeira data no formato dd/mm/aaaa: ");

scanf("%s", data1);

ano1[0] = '';

strncat(ano1, data1+6, 4);

ano1[4] = '';

mes1[0] = '';

strncat(mes1, data1+3, 2);

mes1[2] = '';

dia1[0] = '';

strncat(dia1, data1, 2);

dia1[2] = '';

printf("\t\t\n\nDigite a segunda data no formato dd/mm/aaaa: ");

scanf("%s", data2);

ano2[0] = '';

strncat(ano2, data2+6, 4);

ano2[4] = '';

mes2[0] = '';

strncat(mes2, data2+3, 2);

mes2[2] = '';

dia2[0] = '';

strncat(dia2, data2, 2);

dia2[2] = '';

TempDia = ((atof(dia1))-(atof(dia2)));

TempMes = (((atof(mes1))-(atof(mes2))) * 30.5);

TempAno = (((atof(ano1))-(atof(ano2))) * 365.25);

TempFinal = TempDia + TempMes + TempAno;

if (TempFinal < 0)

{

TempFinal = (TempFinal * (-1));

}

A PARTIR DAQUI ESTA O PROBLEMA

AQUI GOSTARIA DE EXIBIR OS DIAS, MES, E ANOS DIGITADOS, MAS NÃO SEI CONVERTER

printf("\nDia: %s %s",dia1,dia2);

printf("\nMes: %s %s",mes1,mes2);

printf("\nAno: %s %s",ano1,ano2);

ESTE É O RESULTADO FINAL

printf("\n%1.0f", TempFinal);

}

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Que tal você fazer assim:

int dia, mes, ano;

printf("Digite a data no formato dd/mm/aaaa: ");

scanf(" %d/%d/%d", dia, mes, ano);

assim o "/" será desconsiderado na leitura se o usuario coloca-lo.

Assim você não precisa conveter nada. Ok?

Link para o comentário
Compartilhar em outros sites

  • 0
Que tal você fazer assim:

int dia, mes, ano;

printf("Digite a data no formato dd/mm/aaaa: ");

scanf(" %d/%d/%d", dia, mes, ano);

assim o "/" será desconsiderado na leitura se o usuario coloca-lo.

Assim você não precisa conveter nada. Ok?

Perdão correção no seguite trecho:

scanf(" %d/%d/%d", &dia, &mes, &ano);

Link para o comentário
Compartilhar em outros sites

  • 0
Que tal você fazer assim:

int dia, mes, ano;

printf("Digite a data no formato dd/mm/aaaa: ");

scanf(" %d/%d/%d", dia, mes, ano);

assim o "/" será desconsiderado na leitura se o usuario coloca-lo.

Assim você não precisa conveter nada. Ok?

Perdão correção no seguite trecho:

scanf(" %d/%d/%d", &dia, &mes, &ano);

Agradeço a sugestão :laugh: mas preciso efetuar a conta com "30.5" e "365.25", se arredondar o resultado será alterado, quanto as "/" elas já não são inclusas nos vetores por causa da função "strncat", ela me permite separar e mover um pedaço da string, pelo fato da conta sou obrigado a converter as variaveis, se souber alguma maneira por favor post.

Malvew

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

ficaria sim, mas já fiz o programa com vetores, o que diminuiu bastante, e a alteração aumentaria consideravelmente meu codigo, no programa eu transfiro as STRING para algumas variaveis FLOAT, para poder realizar a conta, mas do mesmo jeito é necessário converter.....Existe alguma função que converta de CHAR(string) para INT e outra que converta de INT para FLOAT ?

Link para o comentário
Compartilhar em outros sites

  • 0

Ou eu não estou entendendo o que vocês querem fazer ou vocês estão complicando muito...

Pra que ler como string e depois transformar para outro tipo qualquer, se eu posso ler logo no tipo que eu irei precisar...

Se quero poder usar para calculos precisos uso float ou double, se quero efetuar alguma continha uso int.

Pra que complicar....

Se eu não estiver entendendo que vocês realmente querem fazer por favor expliquem-se novamente para que eu tente ajuda-los...

Os comenados de conversão que eu achei e que eu sei são os atoi, atof.... que transformam uma string (char*) em outros tipos.... Se alguém souber de outros podem postar ;)

Link para o comentário
Compartilhar em outros sites

  • 0

Bom vamos lá:

o elemento vem digita uma data, depois outra, ahi eu mostro pra ele os dias que ele tem da primeira até a segunda.

eu leio em string porque preciso separar dia, mes e ano, strncat da erro com float ou double, por isso string.

nos vetores dia[] mes[] ano[], eu coloco segundo seu nome respectivamente, data1 e data2.

agora é só calcular, mas para isso teria que converter meus vetores....ahi então posso exibir em float, é isso, na hora de exibir só aparece 0.0

Link para o comentário
Compartilhar em outros sites

  • 0

Bom vamos lá:

o elemento vem digita uma data, depois outra, ahi eu mostro pra ele os dias que ele tem da primeira até a segunda.

eu leio em string porque preciso separar dia, mes e ano, strncat da erro com float ou double, por isso string.

nos vetores dia[] mes[] ano[], eu coloco segundo seu nome respectivamente, data1 e data2.

agora é só calcular, mas para isso teria que converter meus vetores....ahi então posso exibir em float, é isso, na hora de exibir só aparece 0.0

Link para o comentário
Compartilhar em outros sites

  • 0

Vê se esse codigo resolve?

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

main()
{
    float diaini, mesini, anoini;
    float diafim, mesfim, anofim;
    float calcdia = 0, calcmes = 0 , calcano = 0;
    float tempRestante = 0;

    do
    {
    printf("Digite a primeira data (dd/mm/aaaa): ");
    scanf(" %f/%f/%f", &diaini, &mesini, &anoini);

    printf("Digite a segunda data (dd/mm/aaaa): ");
    scanf(" %f/%f/%f", &diafim, &mesfim, &anofim);
    
    }while(anoini>anofim);

    if(anoini == anofim)
    {
        if(mesini == mesfim)
        {
            calcdia = diafim - diaini;
        }

        else
        {
            calcdia = diafim - diaini;
            calcmes = mesini - mesfim;
        }
    }

    else
    {
        calcdia = diafim - diaini;
        calcmes = mesfim - mesini;
        calcano = anofim - anoini;
    }

    if(calcdia<0) { calcdia *= -1;}

    else if (calcmes<0) { calcmes *= -1; }

    else if (calcdia<0 && calcmes<0) 
    {
       calcmes *= -1;
       calcdia *= -1;
    }
    
    tempRestante += calcdia;

    if(calcmes>0)
    {
      tempRestante += calcmes*30;
      
       if(calcano>0) 
         tempRestante += calcano*365;
    }

    else
    {
        if(calcano>0)
          tempRestante += calcano*365;
    }

    printf("tempo restante: %.2f dias\n\n", tempRestante);

    system("pause");
}

Pode estar faltando algum tratamento de erro, mas isso você pode colocar depois

Link para o comentário
Compartilhar em outros sites

  • 0

Corrigindo:

if(anoini == anofim)
    {
        if(mesini == mesfim)
        {
            calcdia = diafim - diaini;
        }

        else
        {
            calcdia = diafim - diaini;
            calcmes = mesfim - mesini;
        }
    }

Link para o comentário
Compartilhar em outros sites

  • 0

:laugh: FUNCIONOU :laugh:

Kassi sou muito grato pela ajuda e paciencia, acho que minha ideia de usar vetor me fez criar uma visão de tunel, olhando só para um caminho, mas vou pesquisar como transformar string em float e vou postar aqui no forum ainda, muito obrigado mesmo.

Malvew :rolleyes:

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...