Hola gentes. Tenía un problema en un programilla que estoy haciendo...el caso es que obtengo con el gets un char* el cual son varias palabras separadas con el espacio de toda la vida y a la hora de intentar separar la 1ª palabra utilizando un while no se a que comparar el caracter del char*...He probado "",' ', incluso el ascii de la barra espaciadora pero no doy con ello...alguien me puede ayudar?? Espero haberme explicado bien...gracias
Pues debo cometer algún fallo tonto que no veo xD
while(comandoEnt!=" "){
comando=comandoEnt;
i++;
}
Entra en el while y no sale nunca...por lo que deduzco que no identifica el " " como la barra espaciadora...gracias por tu ayuda
char comandoEnt =(char) malloc(0);
char comando = (char) malloc(0);
[...]
do{
printf("P:/>");
gets(comandoEnt);
tamano = strlen (comandoEnt);
for(i = 0; i < tamano ; i++){
while(comandoEnt!=" "){
comando=comandoEnt;
i++;
}
[...]
En el gets introduzco 2 palabras separadas ya que mi programa tiene que leer comandos (la 1º palabra) con sus respectivos parámetros separados por espacios.
Edit ( Tras leer el codigo )
Usa
char* strtok(char* cadena,const char* separador)
tal que asi:
primerComando = strtok( cadenaACortar, " ");
y llamadas posteriores:
siguienteComando = strtok(NULL," ");
OJO! strtok te jode la cadena que le pasas, y si haces uno y despues uno distinto ya no puedes volver a la cadena inicial porque la has perdido. ( nose si me explico ).
Haz un programa tal que asi:
char c;
c = ' ';
printf( "%d", (int)c ) ;
miras el numerito que te da y luego la comparacion la haces tal que:
xxx es el numero que te pinta por la pantalla el primer programita.
#define SPACE xxx
[...]
(int)comandoEnt != SPACE
De todas formas, el espacio deberia ser:
if ( (int) comandoEnt != (int)' ' ){..}
PD: Si usas el primero tb puedes pedir la cadena y pintar los numeros en un bucle.
Gracias JuAn4k4 el espacio es eso que dices....lo del strtok lo había visto en algún lado y la verdad es que del todo no lo entiendo...no llevo demasiado con C así que a ser posible de momento lo esquivo gracias
Te explico un poco como va el strtok, que es bastante util.
Por ejemplo tenemos la cadena:
Paco-Manuel-Pepin-Manolin-Pedobear-
Bien si quiero cojer los nombres haria esto:
#define NAME_LEN 100
#define NUM_NOMBRES 10
...
char* ptr;
char nombres[NUM_NOMBRES][NAME_LEN];
int n_nombres;
char separador[2];
char auxiliar[512];
char cadena[512];
strcpy(cadena,"Paco-Manuel-Pepin-Manolin-Pedobear-");
// Hago copia para que no me chafe la informacion de la cadena ( No haria falta si no hace falta reutilizarla ).
strcpy(auxiliar,cadena);
strcpy(separador, "-");
// Numero de nombres en la cadena.
n_nombres = 5;
// Primer strtok
ptr = strtok(cadena, "-");
/* Ahora tendremos:
cadena = Paco\0Manuel-Pepin-Manolin-Pedobear-
y la funcion strtok se guardara un puntero auxiliar apuntando a la "M" de Manuel. Es decir en posteriores llamadas a esta funcion con la cadena NULL empezara a partirla a partir de Manuel.
// copio el contenido en una variable con los nombres
strcpy(nombres[0], ptr);
// Y ahora cojo los demas
for ( i = 1; i< n_nombres; i++)
{
ptr = strtok(NULL,"-");
strcpy(nombres[i], ptr);
}
..
Por lo q entiendo quieres leer palabras y q cuando llegues a un caracter q no sea una letra ( espacio, coma, punto, etc), te lo guarde como una palabra, y siga leyendo la siguiente.
Puedes poner:
letra=getchar();
while( tolower(letra) >= 'a' && tolower(letra) <= 'z')
{
//mientras sea una letra, q te haga en el while lo q tu quieras, como guardar las letras leidas y tener la palabra q buscas
}
El "tolower" es para q te lea tanto las mayusculas como las minusculas.
no me acuerdo bien de C, pero en el primer while q he visto comparas una cadena con != ?? las cadenas no se cmoparaban con strcmp(tuletra," "), si devuelve 0 es q son iguales, osea, es un espacio. creo vamos, para dejarse de strtok y polladas desas, saludos.
edit: #15, obviamente yo solo taba suponiendo, no he dicho q utilice SOLO esa linea de codigo, q meta esa comparacion dentro de un bucle recorriendo, como tú muy bien dices, el array, y si alguna de esas "letras" es un espacio, ergo lleva un espacio, gl :/
si haces malloc(0) es normal que no funcione, porque en el caso de que el programa no casque a saber donde guarda la info (no se si me equivoco)
yo lo haria con scanf, para mi es mas facil y ya te hace la separación
#14 te recuerdo que char* es un array de caracteres, por lo que si quieres comprobar que en la cadena esta la letra x tienes que recorrerla y comprobar letra a letra, lo que tu has puesto es para comprobar si la cadena es un espacio, no si lleva un espacio