Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Consulta caracter vacio
Autor Mensaje
mercevico Sin conexión
Empleado de Fotocopiadora
Que los sueños, no sean sólo...
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 34
Agradecimientos dados: 23
Agradecimientos: 8 en 7 posts
Registro en: May 2013
Mensaje: #1
Consulta caracter vacio Dudas y recomendaciones Sintaxis y Semántica de los Lenguajes
Estoy luchando hace rato con esto y no puedo resolverlo... Necesito saber cómo se hace para hacer una comparación de caracter vacío en C..
Yo recibo un char por parámetro, un nombre (puede ser "juan" o ""), y si tiene valor imprime "buen día, nombre", pero sino debe imprimir sólo "buen día". Estoy con un condicional
if(Nombre == ????????????)
printf("Buen día.\n");
else
printf(""buen día, nombre");

En el if ya probé con todos los caracteres que se me ocurrieron, con Null, '\0', '\n', "", " ", ' '... y no funciona nada.. Alguno sabe cómo se hace!??!
NOTA: Recibo una constante fija por parámetro... es:
funcion("Juan);
funcion("");

Debería mostrar:
Buen día, Juan.
Buen día.

Y muestra:
Buen día, Juan.
Buen día, .
17-05-2013 21:32
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Elmats Sin conexión
Presidente del CEIT
Oh my gauss
********

Otra
UBA - Ciencias Exactas y Naturales

Mensajes: 1.307
Agradecimientos dados: 25
Agradecimientos: 102 en 68 posts
Registro en: Mar 2012
Mensaje: #2
RE: Consulta caracter vacio
Probaste usando sizeof? o strlen?
17-05-2013 21:36
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Elmats recibio 1 Gracias por este post
mercevico (17-05-2013)
guriwashere Sin conexión
Empleado del buffet
Live Forever
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4
Agradecimientos dados: 5
Agradecimientos: 2 en 2 posts
Registro en: Apr 2008
Mensaje: #3
RE: Consulta caracter vacio
Probá con el hexadecimal, creo que era 0x20.

Saludos
17-05-2013 21:41
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] guriwashere recibio 1 Gracias por este post
mercevico (17-05-2013)
mercevico Sin conexión
Empleado de Fotocopiadora
Que los sueños, no sean sólo...
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 34
Agradecimientos dados: 23
Agradecimientos: 8 en 7 posts
Registro en: May 2013
Mensaje: #4
RE: Consulta caracter vacio
(17-05-2013 21:36)Elmats escribió:  Probaste usando sizeof? o strlen?

No estoy familiarizada con esas funciones, pero por lo que acabo de ver, están preparadas para cadenas de caracteres (que asumo veré más adelante).. Esto no es una cadena, es simplemente un char vacío.. Cómo podría hacerlo?

(17-05-2013 21:41)guriwashere escribió:  Probá con el hexadecimal, creo que era 0x20.

Saludos

Eso lamentablemente no funcionó =(
(Este mensaje fue modificado por última vez en: 17-05-2013 21:45 por mercevico.)
17-05-2013 21:44
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
JulianD Sin conexión
Colaborador
~`☼`~
********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 2.435
Agradecimientos dados: 275
Agradecimientos: 769 en 108 posts
Registro en: Feb 2011
Mensaje: #5
RE: Consulta caracter vacio
Pero si vos le estas pasando una cadena de caracteres como argumento a una funcion, eso es un string no un char.
Si estas pasando un nombre de mas de un char necesariamente tiene que ser un puntero a char, lo que puede ser interpretado como un string.
Mas alla de que la comparacion la hagas sobre un char.

Yo pondria:

if ((Nombre[0]=='\n')||(Nombre[0]=='\0')) // Comparas el primer caracter de la cadena con el salto de linea y el fin de cadena a la vez, depende que funcion estes usando para tomar el nombre te toma el enter o no te pone el salto de linea..

sino como te dijeron, con strlen:

if (strlen(Nombre)==0)

[Imagen: 2r27ldw.jpg]
(Este mensaje fue modificado por última vez en: 17-05-2013 21:51 por JulianD.)
17-05-2013 21:49
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] JulianD recibio 1 Gracias por este post
mercevico (17-05-2013)
Imakuni Sin conexión
Presidente del CEIT
Did you know that cashews come...
********

Ing. en Sistemas
Facultad Regional Córdoba

Mensajes: 6.968
Agradecimientos dados: 112
Agradecimientos: 119 en 77 posts
Registro en: Jul 2008
Mensaje: #6
RE: Consulta caracter vacio
+1 al \n, o \r, o \r\n
17-05-2013 21:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Imakuni recibio 1 Gracias por este post
mercevico (17-05-2013)
mercevico Sin conexión
Empleado de Fotocopiadora
Que los sueños, no sean sólo...
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 34
Agradecimientos dados: 23
Agradecimientos: 8 en 7 posts
Registro en: May 2013
Mensaje: #7
RE: Consulta caracter vacio
(17-05-2013 21:49)JulianD escribió:  Pero si vos le estas pasando una cadena de caracteres como argumento a una funcion, eso es un string no un char.
Si estas pasando un nombre de mas de un char necesariamente tiene que ser un puntero a char, lo que puede ser interpretado como un string.
Mas alla de que la comparacion la hagas sobre un char.

Yo pondria:

if ((Nombre[0]=='\n')||(Nombre[0]=='\0')) // Comparas el primer caracter de la cadena con el salto de linea y el fin de cadena a la vez, depende que funcion estes usando para tomar el nombre te toma el enter o no te pone el salto de linea..

sino como te dijeron, con strlen:

if (strlen(Nombre)==0)

Mi código es exactamente:
void Saludar( const char* Nombre ){

if(Nombre == ????)
printf("Buen dia.\n");
else
printf("Buen dia, %s.\n",unNombre);
return;


Cuando le trato de poner como cadena, no me lo acepta, me tira error al compilar, y el strlen, no lo tengo, sólo puedo usar la libreria stdio.. y esa funcion esta en otra libreria..
17-05-2013 21:56
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Imakuni Sin conexión
Presidente del CEIT
Did you know that cashews come...
********

Ing. en Sistemas
Facultad Regional Córdoba

Mensajes: 6.968
Agradecimientos dados: 112
Agradecimientos: 119 en 77 posts
Registro en: Jul 2008
Mensaje: #8
RE: Consulta caracter vacio
Lo que podés hacer tambien, es tener el string, y despues mostrar su valor numerico, para saber que caractér te está poniendo.

O sea, definitivamente por lo que contas, "Nombre" no tiene el caracter vacío solo (O sea, Nombre != '\0'), si no que tal vez tiene algun caracter más (un salto de linea, por ejemplo).

Haciendo algo así:

int i;
for(i=0;i<strlen(Nombre)+1;i++){
printf("%d",Nombre[i]);
}

vas a ver el valor de cada byte de la cadena Nombre.

Si fuese el caracter vacío, entonces tendría que aparecerte "0".

Recordá tambien que todo string termina en '\0', así que si es una cadena que tiene un salto de linea, en realidad su valor va a ser:
Nombre[0] = '\n';
Nombre[1] = '\0';
Nombre[2] = <basura, tal vez si accedes a 2 te tire segfault>

Por eso JulianD pregunta por Nombre[0].

Cita:Cuando le trato de poner como cadena, no me lo acepta, me tira error al compilar, y el strlen, no lo tengo, sólo puedo usar la libreria stdio.. y esa funcion esta en otra libreria..

A lo que dije antes, hacé esto:

int i;
for(i=0;Nombre[i] != '\0';i++){
printf("%d",Nombre[i]);
}

Si Nombre = '\0' entonces no tendría que aparecerte nada.
Si Nombre = '
\0' te tendría que aparecer un numero solamente (El correspondiente a
).

Como dijo mas arriba JulianD, dependiendo de como tomes ese string, te toma el salto de linea o no. (si usaste scanf, getc, varía el string que vas a obtener)
(Este mensaje fue modificado por última vez en: 17-05-2013 22:00 por Imakuni.)
17-05-2013 21:58
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Imakuni recibio 1 Gracias por este post
mercevico (17-05-2013)
mercevico Sin conexión
Empleado de Fotocopiadora
Que los sueños, no sean sólo...
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 34
Agradecimientos dados: 23
Agradecimientos: 8 en 7 posts
Registro en: May 2013
Mensaje: #9
RE: Consulta caracter vacio
(17-05-2013 21:52)Imakuni escribió:  +1 al \n, o \r, o \r\n

No termino de comprender esto, si me estás sugiriendo que haga if(Nombre == ('\n'+1)), lo hice y no funciona... Sino cómo sería?
17-05-2013 22:01
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Maik Sin conexión
Presidente del CEIT
.
********

Otra
Otra

Mensajes: 5.297
Agradecimientos dados: 47
Agradecimientos: 190 en 136 posts
Registro en: Sep 2011
Mensaje: #10
RE: Consulta caracter vacio
(17-05-2013 21:49)JulianD escribió:  Pero si vos le estas pasando una cadena de caracteres como argumento a una funcion, eso es un string no un char.
Si estas pasando un nombre de mas de un char necesariamente tiene que ser un puntero a char, lo que puede ser interpretado como un string.
Mas alla de que la comparacion la hagas sobre un char.

Yo pondria:

if ((Nombre[0]=='\n')||(Nombre[0]=='\0')) // Comparas el primer caracter de la cadena con el salto de linea y el fin de cadena a la vez, depende que funcion estes usando para tomar el nombre te toma el enter o no te pone el salto de linea..

sino como te dijeron, con strlen:

if (strlen(Nombre)==0)

oe pregunta, eof no es -1? no podes tirar magia y meterlo directamente en la condicion del else?

MODS
[Imagen: 2r5t075.jpg]
17-05-2013 22:03
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
guriwashere Sin conexión
Empleado del buffet
Live Forever
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4
Agradecimientos dados: 5
Agradecimientos: 2 en 2 posts
Registro en: Apr 2008
Mensaje: #11
RE: Consulta caracter vacio
Ahhh, disculpame, el 0x20 es el espacio ....

probá esto



if (sizeof (cadena) < 1) {
// tarea
} else {
// otra cosa
}

17-05-2013 22:03
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] guriwashere recibio 1 Gracias por este post
mercevico (17-05-2013)
Ichiluk Sin conexión
Campeon del cubo Rubik
Metametaprogramando.
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 134
Agradecimientos dados: 5
Agradecimientos: 21 en 18 posts
Registro en: Apr 2008
Mensaje: #12
RE: Consulta caracter vacio


void saludar(const char* nombre) {

if (nombre[0] == '\0' || nombre[0] == '\n')
puts ("Buen Dia.");
else
printf("Buen Dia, %s.\n", nombre);
}


el return no te hace falta.
(Este mensaje fue modificado por última vez en: 17-05-2013 22:08 por Ichiluk.)
17-05-2013 22:05
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Ichiluk recibio 1 Gracias por este post
mercevico (17-05-2013)
mercevico Sin conexión
Empleado de Fotocopiadora
Que los sueños, no sean sólo...
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 34
Agradecimientos dados: 23
Agradecimientos: 8 en 7 posts
Registro en: May 2013
Mensaje: #13
RE: Consulta caracter vacio
(17-05-2013 21:58)Imakuni escribió:  Lo que podés hacer tambien, es tener el string, y despues mostrar su valor numerico, para saber que caractér te está poniendo.

O sea, definitivamente por lo que contas, "Nombre" no tiene el caracter vacío solo (O sea, Nombre != '\0'), si no que tal vez tiene algun caracter más (un salto de linea, por ejemplo).

Haciendo algo así:

int i;
for(i=0;i<strlen(Nombre)+1;i++){
printf("%d",Nombre[i]);
}

vas a ver el valor de cada byte de la cadena Nombre.

Si fuese el caracter vacío, entonces tendría que aparecerte "0".

Recordá tambien que todo string termina en '\0', así que si es una cadena que tiene un salto de linea, en realidad su valor va a ser:
Nombre[0] = '\n';
Nombre[1] = '\0';
Nombre[2] = <basura, tal vez si accedes a 2 te tire segfault>

Por eso JulianD pregunta por Nombre[0].

Cita:Cuando le trato de poner como cadena, no me lo acepta, me tira error al compilar, y el strlen, no lo tengo, sólo puedo usar la libreria stdio.. y esa funcion esta en otra libreria..

A lo que dije antes, hacé esto:

int i;
for(i=0;Nombre[i] != '\0';i++){
printf("%d",Nombre[i]);
}

Si Nombre = '\0' entonces no tendría que aparecerte nada.
Si Nombre = '
\0' te tendría que aparecer un numero solamente (El correspondiente a
).

Como dijo mas arriba JulianD, dependiendo de como tomes ese string, te toma el salto de linea o no. (si usaste scanf, getc, varía el string que vas a obtener)


Hice
int i;
for(i=0;Nombre[i] != '\0';i++){
printf("%d",Nombre[i]);
}
como sugeriste.. y cuando le mando el "", esto me devuelve 0... Por lo cual si le manda la cadena vacía.. o sigue sin funcionar el '\0' xD
17-05-2013 22:07
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Ichiluk Sin conexión
Campeon del cubo Rubik
Metametaprogramando.
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 134
Agradecimientos dados: 5
Agradecimientos: 21 en 18 posts
Registro en: Apr 2008
Mensaje: #14
RE: Consulta caracter vacio
(17-05-2013 22:07)mercevico escribió:  Hice
int i;
for(i=0;Nombre[i] != '\0';i++){
printf("%d",Nombre[i]);
}
como sugeriste.. y cuando le mando el "", esto me devuelve 0... Por lo cual si le manda la cadena vacía.. o sigue sin funcionar el '\0' xD

el problema es que le ponés %d para imprimir un número. con %c te muestra el caracter, aunque si le ponés \0 no te va a mostrar nada.

Para verificar podés poner un if:
int c = nombre[i];
c != '\0' ? printf("%c", c) : printf("\0");
(Este mensaje fue modificado por última vez en: 17-05-2013 22:14 por Ichiluk.)
17-05-2013 22:12
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Ichiluk recibio 1 Gracias por este post
mercevico (17-05-2013)
JulianD Sin conexión
Colaborador
~`☼`~
********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 2.435
Agradecimientos dados: 275
Agradecimientos: 769 en 108 posts
Registro en: Feb 2011
Mensaje: #15
RE: Consulta caracter vacio
(17-05-2013 22:03)Maik escribió:  oe pregunta, eof no es -1? no podes tirar magia y meterlo directamente en la condicion del else?

Si no me equivoco, eof se usa cuando trabajas con ficheros (archivos).. Nose si se puede usar aca.

_____________

Podrias poner el codigo completo, incluido el main o lo que sea desde donde tomas el nombre?
Capaz ahi salta algo que aca no estamos viendo..

[Imagen: 2r27ldw.jpg]
(Este mensaje fue modificado por última vez en: 17-05-2013 22:14 por JulianD.)
17-05-2013 22:13
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.