Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cyberlacs

Como converter caracter para inteiro

Recommended Posts

Veja ai o exemplo, abaixo o que estou faznedo de errado.

 

Estou batendo em cima em pesquisas na internet e não encontrei nada, estou com muitas duvidas em relação a converção de character para inteiros

 

Este atoi não funciona

 

#include<conio2.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<ctype.h>//toupper
int main(void)
{
    char num[] = "12102010";


    i = atoi(num[1]);

    printf("%d", i);

    getch();
}

 

Fico no aguardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que é "i"? :)

 

Enfim, o erro é bem simples: atoi() recebe um ponteiro para char, e você está passando num[1], que significa [/b]*(num + 1)[/b] (o ponteiro é "derreferenciado").

 

A sintaxe correta seria atoi(num):

 


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

int main()
{

	char *palavra = "322";
	printf("Aqui eh impresso o endereco de memoria do vetor declarado: %d", palavra);
	int numero = atoi(palavra);
	printf("\nAgora sim, um inteiro: %d\n", numero);

	return 0;
}

Lembrando que você terá problemas se tentar converter texto para um valor maior que o máximo que o tipo inteiro da sua arquitetura pode representar (o int da x86 tem 32 bytes, que é suficiente para armazenar valores positivos próximos a 2.147.000). A função equivalente que retorna um long é atol, e caso você precise trabalhar com números em ponto flutuante, use a atof (ascii to float). Para valores bem maiores, use atoll (long long).

 

E já que estamos aqui, que tal incluir a seguinte linha antes da última linha do seu código?

 

return 0;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu amigo guidjos o que eu na verdade quero fazer com o exemplo que descrevi logo acima é, fazer com que o usuario digite a data sem ficar dando (enter), exemplo...

 

dia (enter) / mes (enter) / ano (enter)

 

Ai pensei em fazer com caracter mas não consegui ai fuçando na internet encontrei um maçete, sei lá acho um baita guambiarra... mas mesmo assim implementei em meu codigo mas percebi que esta dando erro quando digito a data 30 09 1975 imprime 30 09 1983 ai percebi que não esta funcionando.

 

 

VALIDA DATA

void ConverteData(int VetData[8], int &retornar, int col, int lin)
{
    int i = 0;
    StData data;



    while(i < 8)
    {
        if(i < 2)
        {
            if(i == 0)
                data.dia = (VetData[i] - 48) * 10;
            else
                data.dia = data.dia + (VetData[i] - 48);
        }
        if(i < 4)
        {
            if(i == 2)
                data.mes = (VetData[i] - 48) * 10;
            else
                data.mes = data.mes + (VetData[i] - 48);
        }
        if(i < 8)
        {
            if(i == 4)
                data.ano = (VetData[i] - 48) * 1000;
            if(i == 5)
                data.ano = data.ano + (VetData[i] - 48) * 100;
            if(i == 6)
                data.ano = data.ano + (VetData[i] - 48) * 10;
            else
                data.ano = data.ano + (VetData[i] - 48);
        }
        i++;
    }

    data.ano = data.ano - 2;
    gotoxy(20, 20); printf("%d - %d - %d", data.dia, data.mes, data.ano);

    if((data.dia >= 1 && data.dia <= 31) && (data.mes >= 1 && data.mes <= 12) && (data.ano >= 1900 && data.ano <= 2100))
    {
        if((data.dia == 29 && data.mes == 2) && (data.ano % 4 == 0))
        {
            gotoxy(col, lin); printf("%d / %d / %d", data.dia, data.mes, data.ano);
            retornar = 1;
        }
        else
        if(data.dia <= 28 && data.mes == 2)
        {
            gotoxy(col, lin); printf("%d / %d / %d", data.dia, data.mes, data.ano);
            retornar = 1;
        }
        else
        if((data.dia <= 30) && (data.mes == 4 || data.mes == 6 || data.mes == 9 || data.mes == 11))
        {
            gotoxy(col, lin); printf("%d / %d / %d", data.dia, data.mes, data.ano);
            retornar = 1;
        }
        else
        if((data.dia <= 31) && (data.mes == 1 || data.mes == 3 || data.mes == 5 || data.mes == 7 || data.mes == 8 || data.mes == 10 || data.mes == 12))
        {
            gotoxy(col, lin); printf("%d / %d / %d", data.dia, data.mes, data.ano);
            retornar = 1;
        }
        else
        {
            gotoxy(col, lin); printf("DATA INCORRETA !");
            Sleep(2500);
            retornar = 0;
        }

    }
    else
    {
        gotoxy(col, lin); printf("DATA INCORRETA !");
        Sleep(2500);
        retornar = 0;
    }
}

CADASTRO DE CLIENTE

void CadCliente(StCliente VetCliente[TF], int &TL)
{
    char op;
    int AuxData[8], i, digita, retorno;

    do
    {
        clrscr();

        if(TL < TF)
        {
            caixatexto(1, 4, 1, 80, 10, 0); textcolor(14);   gotoxy(26,3); printf("* * * * CADASTRAR CLIENTE * * * *");

            caixatexto(5, 24, 1, 80, 10, 0);

            caixatexto(6, 8, 15, 35, 10, 0);     textcolor(14);      gotoxy(3,7);    printf("ID:");
            caixatexto(9, 11, 15, 77, 10, 0);    textcolor(14);      gotoxy(3,10);   printf("NOME:");
            caixatexto(12, 14, 15, 77, 10, 0);   textcolor(14);      gotoxy(3,13);   printf("ENDERECO:");
            caixatexto(15, 17, 15, 35, 10, 0);   textcolor(14);      gotoxy(3,16);   printf("CPF:");
            caixatexto(18, 20, 15, 35, 10, 0);   textcolor(14);      gotoxy(3,19);   printf("NASCIMENTO:");

            caixatexto(6, 8, 53, 77, 10, 0);     textcolor(14);      gotoxy(45,7);   printf("DATA:");

            DiaMesAno();
            gotoxy(54,7); printf(str);
            strcpy(VetCliente[TL].DataCadastro, str);

            gotoxy(16,7); printf("%d", TL + 1);

            fflush(stdin);
            gotoxy(16,10);   gets(VetCliente[TL].nome);

            fflush(stdin);
            gotoxy(16,13);  gets(VetCliente[TL].endereco);

            gotoxy(16,16);  scanf("%d",&VetCliente[TL].cpf);

           

            //Aqui o usuario digita a data 29092000


            i = 0;

            do
            {
                gotoxy(16, 19); printf("                ");

                while(i < 8)
                {
                    gotoxy(16 + i, 19); digita = getche();
                    AuxData[i] = digita;
                    i++;
                }

                getch();

                ConverteData(AuxData, retorno, 16, 19);

                i = 0;

            }while(retorno == 0);

            TL++;

            textcolor(13); gotoxy(26,3); printf("CADASTRO REALIZADO   COM   SUCESSO !");
            Sleep(1500);

            if(TL < TF)
            {
                textcolor(2); gotoxy(20,3); printf("[ENTER] CADASTRAR | [ESC] ENCERRAR CADASTROS");
                op = getch();
            }
            else
            {
                textcolor(2); gotoxy(3,3); printf("VOCE JA UTILIZOU O LIMITE MAXIMO DE %d CADASTROS NA VERSAO GRATIS DO SISTEMA", TF);
                getch();
            }
        }
        else
        {
            caixatexto(1, 4, 1, 80, 10, 0); textcolor(14);   gotoxy(26,3); printf("* * * * CADASTRAR CARRO * * * *");

            caixatexto(5, 24, 1, 80, 10, 0);

            textcolor(2); gotoxy(5,12); printf("VOCE EXCEDEU O LIMITE MAXIMO DE %d CADASTROS NA VERSAO GRATIS DO SISTEMA", TF);
            textcolor(2); gotoxy(20,13); printf("ADQUIRA JA A VERSAO PROFISSIONAL DO SISTEMA");

            getch();
        }
    }while(TL < TF && op != 27);

    getch();
}

Gostaria de saber o que estou fazendo de errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não me leva a mal mas não vou ler seu código... hehe

 

Seguinte, eu não costumo fazer isso, mas aí vai:

 

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


void lerdata(int *data)
{
	int i, j;
	unsigned char byte;
	char dia_mes[3], ano[5];

	*dia_mes = *ano = 0;

	printf("\n\tInsira a data (ex: 15 10 2010): ");

	for (i = 0; i < 2; i++)
	{
		j = 0;
		while((byte = fgetc(stdin)) && isdigit(byte) && j < 2)
			dia_mes[j++] = byte;

		dia_mes[2] = 0;

		data[i] = atoi(dia_mes); // dia e mes sao lidos
	}

	// leitura do ano
	i = 0;
	while((byte = fgetc(stdin)) && isdigit(byte) && i < 4)
		ano[i++] = byte;

	ano[4] = 0;

	data[2] = atoi(ano);

	// aqui vale a pena fazer verificacao melhor. Isso eh soh exemplo.
	if 
	(
		data[0] == 0 || data[0] > 31 ||
		data[1] == 0 || data[1] > 12 ||
		data[2] == 0

	) fprintf(stderr, "\n\n\tAviso: valores invalidos inseridos");


}


int main()
{
	int data[3];

	lerdata(data);

	printf("\n\nLidos:\n-------\n\tDia: %d\n\tMes: %d\n\tAno: %d\n\n", data[0], data[1], data[2]);

	return 0;
}

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.