Comprobación tipo variables C

Responder
Avatar de Usuario
Xtreme
Mensajes: 1023
Registrado: 13 Dic 2009 23:47
Contactar:

Comprobación tipo variables C

Mensaje por Xtreme »

Hola

Tengo una práctica de programación y estoy teniendo un quebradero de cabeza con una cosa que luego seguro es una tontería:

El caso es, tengo un programa secuencia.c al que se le tienen que pasar 3 argumentos al ejecutarlo , y yo necesito comprobar que esos 3 argumentos son int o float.

Ahora viene lo bueno, yo creo que de llevar toda la tarde programando no me funciona bien la cabeza, y no se me ocurre como comprobar que los 3 argumentos sean int o float xDD

Agradezco cualquier ayuda, la práctica lo que tiene que hacer es despues de comprobar que son números los argumentos, es recorrer desde el argumento 2 hasta el argumento 1 sumandole cada paso el valor del argumento 3 (pero vamos, esto sé hacerlo sin problemas, el tema es hacer las comprobaciones)

Muchas gracias, y lo más importante, perdón por el tocho
[equipo]Sobremesa jugón|Intel Core 2 Q8200 @2.8|Asus Maximus Formula|2x2gb Samsung Drr2 667@800|AMD 6870 xfx OC|||Thermaltake isgc 300||Nox coolbay W|Creative soundblaster|Windows 7 Ultimate|||Logitech g400||[/equipo]
Avatar de Usuario
alarido
Mensajes: 2313
Registrado: 04 Feb 2007 03:57
Ubicación: Madrid

Re: Comprobación tipo variables C

Mensaje por alarido »

Con stdlib.h las funciones atof o atoi por ejemplo convierten cadenas a números, pero no comprueban nada... con las funciones strto* puedes leer los errores devueltos por la conversión para saber si son o no un tipo u otro. También puedes hacerlo con sscanf y comprobando que las cadenas estén hechas solo con números, etc.
Irenicus
Mensajes: 1238
Registrado: 19 Mar 2007 23:22

Re: Comprobación tipo variables C

Mensaje por Irenicus »

Quizás te interese usar la función isdigit; junto con if (s == '.') para saber si es un float.
Avatar de Usuario
Xtreme
Mensajes: 1023
Registrado: 13 Dic 2009 23:47
Contactar:

Re: Comprobación tipo variables C

Mensaje por Xtreme »

Muchas gracias, luego probaré con strto, a ver que tal :D
[equipo]Sobremesa jugón|Intel Core 2 Q8200 @2.8|Asus Maximus Formula|2x2gb Samsung Drr2 667@800|AMD 6870 xfx OC|||Thermaltake isgc 300||Nox coolbay W|Creative soundblaster|Windows 7 Ultimate|||Logitech g400||[/equipo]
Avatar de Usuario
Xtreme
Mensajes: 1023
Registrado: 13 Dic 2009 23:47
Contactar:

Re: Comprobación tipo variables C

Mensaje por Xtreme »

estoy teniendo problemas al usar strod, por ejemplo, llamando a la función asi:

Código: Seleccionar todo

char *finalPtr;
strtod(argv[1], &finalPtr);
Recibo un "Violacion de segmento" al ejecutar el programa, ya sea sin parametro, con un parametro entero, un float, un string

¿Alguien puede saber porque?

Un saludo

PD: lo que necesito es lo de antes, ver si mis tres argumentos son numeros
[equipo]Sobremesa jugón|Intel Core 2 Q8200 @2.8|Asus Maximus Formula|2x2gb Samsung Drr2 667@800|AMD 6870 xfx OC|||Thermaltake isgc 300||Nox coolbay W|Creative soundblaster|Windows 7 Ultimate|||Logitech g400||[/equipo]
Irenicus
Mensajes: 1238
Registrado: 19 Mar 2007 23:22

Re: Comprobación tipo variables C

Mensaje por Irenicus »

Aunque no sea lo más eficiente, móntate una función que lo haga, por ejemplo algo similar a esto (en C++):

Código: Seleccionar todo

#include <iostream>
#include <string>
using namespace std;

bool es_numero (char *palabra) {
	bool ya_tengo_punto = false;
	for (int i = 0; palabra[i]; ++i) {
		if (palabra[i] >= '0' and palabra[i] <= '9');
		else if (palabra[i] == '.' and not ya_tengo_punto) ya_tengo_punto = true;
		else return false;
	}
	return true;
}

int main(int argc, char** argv) {
	if (argc == 4) {
		for (int i = 1; i <= 3; ++i) {
			if (es_numero(argv[i])) cout << "OK" << endl;
			else cout << "KO" << endl;
		}
	}
	else cout << "Programa mal llamado" << endl;
}
Avatar de Usuario
Xtreme
Mensajes: 1023
Registrado: 13 Dic 2009 23:47
Contactar:

Re: Comprobación tipo variables C

Mensaje por Xtreme »

Voy a intentarlo de esta forma, gracias
[equipo]Sobremesa jugón|Intel Core 2 Q8200 @2.8|Asus Maximus Formula|2x2gb Samsung Drr2 667@800|AMD 6870 xfx OC|||Thermaltake isgc 300||Nox coolbay W|Creative soundblaster|Windows 7 Ultimate|||Logitech g400||[/equipo]
Responder