Ir para conteúdo

POWERED BY:

Arquivado

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

_Isis_

[Tutorial] Conversões em C

Recommended Posts

Coisa rápida....

 

#include <stdlib.h>
#include <stdio.h>
int main() {
	char S[255];
	scanf("%s",&S);

	printf("%d\n",atoi(S)); // str -> int
	printf("%l\n",atol(S)); // str -> long
	printf("%f\n",atof(S)); // str -> float
	return 0;
}

 

 

	#include <stdlib.h>
#include <stdio.h>
int main() {
	char S[255];
	scanf("%s",&S);

	printf("%f\n",strtof(S,NULL)); // str -> float
	printf("%lf\n",strtod(S,NULL)); // str -> double
	printf("%L\n",strtold(S,NULL)); // str -> long double
	return 0;
}

 

 

O problema é que atoi, atol e atof não informam sobre overflow, ao contrário de strtof, strtod e strtold.

 

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main() {
	char S[255];
	scanf("%s",&S);
	printf("%d\n",atof(S));

	scanf("%s",&S);
	float F = strtof(S,NULL);
	if (errno == ERANGE) {
		printf("%m\n");
		return 1;
	}

	return 0;
}

 

 

Para converter floats para strings algumas das funções que podem ser utilizadas são: gcvt, fcvt e ecvt, embora estejam marcadas como obsoletas e pertençam ao POSIX.1-2001. É recomendado usar sprintf.

 

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

int main() {
	char int_[255], float_[255], double_[255];
	int D;
	float F;
	double DD;
	scanf("%d %f %lf",&D, &F, &DD);
	sprintf(int_,"%d",D);
	sprintf(float_,"%f",F);
	sprintf(double_,"%lf",DD);

	printf("%s\n%s\n%s\n",int_, float_, double_);
	return 0;
}

 

 

 

 

Também podemos utilizar a função strtol. Mas além de converter strings para longs, podemos converter bases.

 

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

int main() {
	char *S[6];
	S[0] = "10";
	S[1] = "110101";
	S[2] = "10101010";
	S[3] = "111111";
	S[4] = "100101";
	S[5] = "101";
	for(int i=0;i<6;i++)
		printf("%s = %d\n",S[i],(int)strtol(S[i],NULL,2));
	return 0;
}

 

	#include <stdlib.h>
#include <stdio.h>
int main() {
	char S[]= "fad12";
	char A[]= "6161662";
	char B[]= "923820ahsgd";
	printf("%s = %d\n",S,(int)strtol(S,NULL,16));
	printf("%s = %d\n",A,(int)strtol(A,NULL,7));
	printf("%s = %d\n",B,(int)strtol(B,NULL,36));
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Principalmente a mim, que provavelmente não vou ter que mudar códigos porque usam itoa p/ conversão.

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.