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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Dar una salida en forma de lista en leguaje C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Dar una salida en forma de lista en leguaje C  (Leído 5,393 veces)
ThronerAXE

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #10 en: 19 Marzo 2013, 02:03 am »

Muchas gracias por sus consejos y ayudas que me han servido mucho para seguir aprendiendo.

1) Al pedir confirmación si se debe continuar o no:
Código
  1. scanf("%f",&deuda[i]);
  2. printf("\n\nHay otro cliente...S/N? ");
  3. scanf("%c",&resp);
La variable "resp" terminara almacenando el avance de linea generado al introducir el monto de la deuda, para que funcione correctamente debes utilizar " %c":
Código
  1. scanf("%f",&deuda[i]);
  2. printf("\n\nHay otro cliente...S/N? ");
  3. scanf(" %c",&resp);


Tengo una duda con esto, noto que la unica diferencia que hubo en este codigo fue que colocaste un space en el scanf de la variable de resp, pero no termino de entender por que??


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #11 en: 19 Marzo 2013, 04:42 am »

Por partes:

* La función scanf con casi todos los especificadores como "%d", "%s", etc. lo primero que hace es descartar el espacio blanco, tomando tu programa como ejemplo no hay problema al introducir (cuando se pide la deuda):
Código:
    12.34{ENTER}

Pero con los especificadores "%[]" y "%c" ese descarte no sucede, la función retorna el primer carácter que encuentre en el bufer de la entrada estándar.

* Regresando al ejemplo, al pedir la deuda si se introdujo:
Código:
    12.34{ENTER}
La función scanf con "%f" descarta los espacios, con los caracteres "12.34" genera el numero y lo almacena en deuda[ i ], el avance de linea o '\n' se queda en el bufer de la entrada estándar y, cuando se llama a scanf con "%c", es almacenado en la variable resp.

* Para evitarlo se utiliza " %c", el espacio en la cadena de formato indica "leer y descartar una secuencia de cero o mas caracteres de espacio blanco". En otras palabras la función primero descarta los caracteres de ese tipo (en tu caso el avance de linea) y solo entonces lee un carácter y lo almacena en la variable resp.

* Por ultimo con scanf los caracteres ' ', '\t', '\n' no se toman literalmente (salvo dentro de "%[]"), en su lugar generan el comportamiento ya mencionado. Para explicarlo mejor puedes utilizar " %c", "\t%c", "\n%c" y el efecto sera el mismo.

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
ThronerAXE

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #12 en: 22 Marzo 2013, 02:44 am »

Código
  1. scanf("%f",&deuda[i]);
  2. printf("\n\nHay otro cliente...S/N? ");
  3. scanf("%c",&resp);

Pensando un poco en la estetica, y tambien en otra forma de hacerlo, ¿existe algun codigo para que al momento de que en la pantalla me pregunte "Hay otro cliente...?S/N" y yo ingrese un caracter, ese caracter no se vea en la pantalla, nose si me explique bien xd un ejemplo grafico sería:

en la pantalla:
Hay otro cliente...?S/N s (estoy ingresando el caracter s y se repite el bucle)
Hay otro cliente...?S/N   (ingreso el caracter s pero no se ve en la pantalla)


Otra duda es, que hay unos codigos que he visto que estan asi:
Código
  1. printf("\n\nHay otro cliente...S/N? ");
  2. fflush(studin);

mi duda es, que en ningun momento veo q guarden el dato ¿ no se deberia usar el scanf para guardarlo en la variable?
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #13 en: 22 Marzo 2013, 04:01 am »

Pensando un poco en la estetica, y tambien en otra forma de hacerlo, ¿existe algun codigo para que al momento de que en la pantalla me pregunte "Hay otro cliente...?S/N" y yo ingrese un caracter, ese caracter no se vea en la pantalla
Es posible pero debes utilizar una biblioteca especifica de tu compilador (por ejemplo conio o ncurses) o el API de tu SO (por ejemplo la Win32 API).

Otra duda es, que hay unos codigos que he visto que estan asi:
Código
  1. printf("\n\nHay otro cliente...S/N? ");
  2. fflush(studin);

mi duda es, que en ningun momento veo q guarden el dato ¿ no se deberia usar el scanf para guardarlo en la variable?
Lo hacen: la función getchar obtiene el carácter, este se pasa a mayúsculas con toupper y finalmente se almacena en la variable "resp".

Y disculpa lo repetitivo pero no se recomienda el uso de "fflush(stdin)".

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
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines