elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:52  


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Pregunta sobre sscanf(); ??? (RESUELTO)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pregunta sobre sscanf(); ??? (RESUELTO)  (Leído 781 veces)
ralymontes

Desconectado Desconectado

Mensajes: 21



Ver Perfil
Pregunta sobre sscanf(); ??? (RESUELTO)
« en: 13 Noviembre 2011, 01:30 »

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<ctype.h>
char id;
int n,i;

int main()
{
char cadena[100];
printf("Inserta n:\n");
scanf("%d",&n);
    for(i=0;i<n;i++)
    {
    sscanf("Inserta identificador (e, v, l, c):\n","%c",&id);
    sscanf("Inserta cadena a tratar:\n","%s",cadena);
    }
return 0;
}

Por que cuando el programa se ejecuta paraciera que no entra al for, es decir, se sale completamente. :/

Tambien intente poner dentro del ciclo el clásico printf() y el scanf(), pero tengo muchos problemas con los buffer ( tambien se salta las lineas) y fflush(stdin) no me dio buenos resultados. Cómo soluciono esto?

Gracias  y Saludos, Raly.


« Última modificación: 13 Noviembre 2011, 18:43 por ralymontes » En línea
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Pregunta sobre sscanf(); ???
« Respuesta #1 en: 13 Noviembre 2011, 02:00 »

Los problemas aquí son dos: estas utilizando sscanf, ella lo que hace es procesar la cadena pasada como primer argumento y por supuesto no se va a imprimir en la salida estándar.

El segundo se debe al uso de "%c" ya que al utilizar ese especificador la función no ignora (como en otros casos) el espacio blanco, en su lugar se "traga" el primer carácter que encuentre y este es usualmente un avance de linea.

Por ultimo no deberías utilizar "fflush(stdin)", el porque se explica en el tema |Lo que no hay que hacer en C/C++. Nivel básico|.

Para que funcione correctamente debes cambiarlo a:
Código
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
   char palabra[100];
   char id;
   int n;
   int i;
 
   printf("Inserta n: ");
   fflush(stdout);
   if (scanf("%d", &n) != 1 || n < 0)
       return EXIT_FAILURE;
 
   for (i = 0; i < n; i++){
       printf("Inserta identificador (e, v, l, c): ");
       fflush(stdout);
       scanf(" %c", &id);
 
       printf("Inserta PALABRA a tratar: ");
       fflush(stdout);
       scanf("%s", palabra);
 
       printf("Id: %c\n", id);
       printf("Palabra: %s\n\n", palabra);
   }
 
   return EXIT_SUCCESS;
}

El espacio en " %c" es critico para descartar el espacio blanco antes del carácter.

Un saludo


En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
ralymontes

Desconectado Desconectado

Mensajes: 21



Ver Perfil
Re: Pregunta sobre sscanf(); ???
« Respuesta #2 en: 13 Noviembre 2011, 07:49 »

Hola:

Muchas gracias por responder, pero tengo un problema y que quiza no lo dije antes, sucede que  "palabra" es una cadena con espacios, es ahí donde tambien falla lo que has puesto, no sé exactamente que pasa, pero cuando meto una cadena con espacios de nuevo se salta lineas. :/

Me han dicho que una solucion es obtener caracter por caracter de la entrada estandar.

Saludos y mil gracias!
En línea
satu

Desconectado Desconectado

Mensajes: 263

Siempre aprendiendo


Ver Perfil WWW
Re: Pregunta sobre sscanf(); ???
« Respuesta #3 en: 13 Noviembre 2011, 10:52 »

Hola

Código
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
   char palabra[100];
   char id;
   int n;
   int i;
 
   printf("Inserta n: ");
   if (scanf("%d", &n) != 1 || n < 0)
       return EXIT_FAILURE;
   while(getchar() != '\n') ;
 
   for (i = 0; i < n; i++)
       {
       printf("Inserta identificador (e, v, l, c): ");
       scanf(" %c", &id);
       while(getchar() != '\n') ;
 
       printf("Inserta PALABRA a tratar: ");
       fgets(palabra, 99, stdin);
 
       printf("Id: %c\n", id);
       printf("Palabra: %s\n\n", palabra);
       }
 
   return EXIT_SUCCESS;
}
 

Saludos
En línea

Breakbeat como forma de vida
ralymontes

Desconectado Desconectado

Mensajes: 21



Ver Perfil
Re: Pregunta sobre sscanf(); ???
« Respuesta #4 en: 13 Noviembre 2011, 18:42 »

Ahmmm Muchas gracias, esto me estaba comiendo mucho tiempo, pues estoy tratando de hacer un analizador sintactico... pero no podia con esto.

Gracias, Saludos, Raly.
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Una Pregunta Sobre DVD's
Multimedia
el_chente23 1 403 Último mensaje 5 Septiembre 2004, 07:32
por Luis_Kano
pregunta sobre ip
Redes
deft 2 573 Último mensaje 21 Octubre 2004, 06:10
por jolsalive
pregunta sobre mi pc
Hardware
angelikito 1 395 Último mensaje 25 Octubre 2004, 08:29
por el-brujo
Duda con sscanf y punteros en C++
Programación C/C++
javierchu_cai 11 2,320 Último mensaje 21 Agosto 2009, 17:24
por Eternal Idol
{Resuelto} [vbs] Pregunta sobre inputbox..
Scripting
xassiz_ 4 1,513 Último mensaje 16 Septiembre 2009, 17:46
por xassiz_
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines