1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Dúvidas ANSI-C

Discussão em 'Programação' iniciada por jopabasa, 3 de Janeiro de 2007. (Respostas: 2; Visualizações: 700)

  1. Boa tarde a todos os membros e, desde já, votos de um excelente 2007 a título individual e para o próprio forum.
    Sou novato na linguagem C e tenho algumas dificuldades em entender os caprichos das strings. Por ex., no código seguinte, utilizo o "sprintf" para converter inteiros (datas) em strings (não posso utilizar o "itoa", pq n é ansi-c). Os 2 primeiros "sprintf", os que trabalham com limini e limfim já funcionam bem, mas os 2 últimos (que trabalham com autini e autfim) dão barraca: ao executar o 4º baralha o resultado do 3º. Alguma alma bondosa e esclarecida me pode dizer o que estou a fazer mal? Obrigado.

    #define MAXAUT 1000
    struct stdata
    {
    int ano;
    int mes;
    int dia;
    };
    struct st4
    {
    int numero;
    struct stdata inicio;
    struct stdata fim;
    int responsavel;
    char descricao[30];
    int pessoal[30];
    int grupos[10];
    } autorizacao[MAXAUT];
    int main()
    {
    int i;
    struct stdata dti,dtf;
    char autini[8],autfim[8],limini[9],limfim[9];
    printf("Data.. (dd mm aaaa): ");
    scanf("%i %i %i",&dtf.dia, &dtf.mes, &dtf.ano);
    sprintf(limfim,"%4i%2i%2i",dtf.ano,dtf.mes,dtf.dia);
    for (i=0;i<8;i++)
    if (limfim==' ') limfim='0';
    for (i=0;i<MAXAUT;i++)
    {
    if (autorizacao.numero!=0)
    {
    sprintf(autini,"%4i%2i%2i",autorizacao.inicio.ano,autorizacao.inicio.mes,autorizacao.inicio.dia);
    for (i=0;i<8;i++){
    if (autini==' ') autini='0';}
    sprintf(autfim,"%4i%2i%2i",autorizacao.fim.ano,autorizacao.fim.mes,autorizacao.fim.dia);
    for (i=0;i<8;i++){
    if (autfim==' ') autfim='0';}
    }
    {
    return (0);
    }
     
  2. inginheiiro

    inginheiiro Power Member

    Código:
    char* itoa(int val, int base){
    		static char buf[32] = {0};
    		int i = 30;
    		for(; val && i ; --i, val /= base)
    			buf[i] = "0123456789abcdef"[val % base];
    		return &buf[i+1];
    	}

    usa esta , é ansi c compliant...


    /ing
     
  3. Funciona, sim senhor! :001:

    Agora resta-me compreendê-la...
    Vou já tratar disso, se tiver alguma dúvida volto a incomodar!

    Obrigado pela tua disponibilidade e rápida resposta inginheiiro.
     

Partilhar esta Página