elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  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 3,686 veces)
ralymontes

Desconectado Desconectado

Mensajes: 47



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

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 pm por ralymontes » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


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

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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.    char palabra[100];
  7.    char id;
  8.    int n;
  9.    int i;
  10.  
  11.    printf("Inserta n: ");
  12.    fflush(stdout);
  13.    if (scanf("%d", &n) != 1 || n < 0)
  14.        return EXIT_FAILURE;
  15.  
  16.    for (i = 0; i < n; i++){
  17.        printf("Inserta identificador (e, v, l, c): ");
  18.        fflush(stdout);
  19.        scanf(" %c", &id);
  20.  
  21.        printf("Inserta PALABRA a tratar: ");
  22.        fflush(stdout);
  23.        scanf("%s", palabra);
  24.  
  25.        printf("Id: %c\n", id);
  26.        printf("Palabra: %s\n\n", palabra);
  27.    }
  28.  
  29.    return EXIT_SUCCESS;
  30. }

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

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
ralymontes

Desconectado Desconectado

Mensajes: 47



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

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: 301

Siempre aprendiendo


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

Hola

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.    char palabra[100];
  7.    char id;
  8.    int n;
  9.    int i;
  10.  
  11.    printf("Inserta n: ");
  12.    if (scanf("%d", &n) != 1 || n < 0)
  13.        return EXIT_FAILURE;
  14.    while(getchar() != '\n') ;
  15.  
  16.    for (i = 0; i < n; i++)
  17.        {
  18.        printf("Inserta identificador (e, v, l, c): ");
  19.        scanf(" %c", &id);
  20.        while(getchar() != '\n') ;
  21.  
  22.        printf("Inserta PALABRA a tratar: ");
  23.        fgets(palabra, 99, stdin);
  24.  
  25.        printf("Id: %c\n", id);
  26.        printf("Palabra: %s\n\n", palabra);
  27.        }
  28.  
  29.    return EXIT_SUCCESS;
  30. }
  31.  

Saludos
En línea

Breakbeat como forma de vida
ralymontes

Desconectado Desconectado

Mensajes: 47



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

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
{Resuelto} [vbs] Pregunta sobre inputbox..
Scripting
xassiz_ 4 3,629 Último mensaje 16 Septiembre 2009, 17:46 pm
por xassiz_
[resuelto]pregunta , informacion del compilador dentro del ejecutable
Programación C/C++
daryo 5 3,219 Último mensaje 14 Marzo 2013, 20:13 pm
por daryo
Duda sobre sscanf y strtok
Programación C/C++
antolinalvaro 1 1,498 Último mensaje 1 Agosto 2018, 15:11 pm
por MAFUS
[Resuelto] [Pregunta]: Crear un timestamp 0000-00-00 00:00:00
PHP
Leguim 3 2,016 Último mensaje 19 Septiembre 2019, 01:05 am
por MinusFour
[Resuelto] [Pregunta]: Deprecated Non-static method users
PHP
Leguim 4 2,832 Último mensaje 13 Febrero 2020, 02:07 am
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines