Ver Mensaje Individual
  #6 (permalink)  
Antiguo 21/04/2015, 00:59
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Leer valores distintos de cero y terminar el programa con 0 sin imprimirlo

Cita:
Iniciado por Kike87 Ver Mensaje
Hola. Soy nuevo en el foro, y creo se puede hacer una solución un poco "viva" para esta situación:
Tengan en cuenta este código en c++, simple, pero el cual resuelve el problema

include <iostream>
using namespace std;

int main() {

int a,b,c;

int a=b=c=5;

cout<<a<<b<<c<<"\b"<<" ";

return 0;

}
En este caso, lo que se hace es imprimir todos los números de seguido, cuando se llega al último de ellos se retrocede el puntero(la rayita _ que aparece en la pantalla de msdos) y se imprime un espacio, el cual reemplaza al último valor. Eso "impide que se vea al valor" aunque esté almacenado en la memoria.
Podrias aplicar el mismo criterio, cuando llegues al momento de imprimir el último elemento, que será el cero, dile al compilador que imprima \b y luego un espacio en blanco.
Como dije previamente, es un poco "avivado" :)
Bienvenido al foro.

Tres cosillas:

  • El código decóralo con la etiqueta del lenguaje que corresponda (mira el desplegable "Highlight" al escribir el mensaje)
  • Estaría bien que el código compilase (falta la '#' del include y el 'int' de a=b=c=5 sobra ;) )
  • No veo qué tiene que ver este código con la pregunta realizada por RGT
Cita:
Iniciado por RGT Ver Mensaje
Llevo ese código, pensé que al ser 0 no entraría al WHILE, además como puedo imprimirlos si no se puede utilizar arreglos.

Alguien puede ayudarme con estas dos cosas, alguna idea?.

Tu código tiene dos problemas:


  • liNumero no está incializado... esto implica que, aunque dificil, se puede dar que el valor inicial de liNumero fuese 0 y tu programa fallaría
  • liContadora lo inicializas a 0 y lo incrementas cada vez que entras en el while antes incluso de pedir el valor, luego liContadora SIEMPRE va a valer 1 o más aunque el primer valor introducido sea 0. Prueba a inicializar liContadora a -1

También puedes evitar la incialización de liNumero cambiando el while por un do-while:

Código C++:
Ver original
  1. int main()
  2. {
  3.     //Declaración de variables
  4.     int liNumero, liContadora = -1;
  5.  
  6.     //Entrada de datos
  7.     do
  8.     {
  9.         liContadora++;
  10.  
  11.         printf("Ingrese un n\243mero: ", 163);
  12.         scanf("%d", &liNumero);
  13.     } while (liNumero != 0);
  14.  
  15.     //Procesamiento
  16.  
  17.     //Salida de datos
  18.     printf("\nCantidad de valores le\241dos: %d\n", liContadora);
  19.  
  20.     return 0;
  21. }

Aunque también puedes inicializar liContadora a 0 e incrementar su valor únicamente si el usuario introduce un valor diferente a 0.

Código C++:
Ver original
  1. int main()
  2. {
  3.     //Declaración de variables
  4.     int liNumero, liContadora = 0;
  5.  
  6.     //Entrada de datos
  7.     do
  8.     {
  9.         printf("Ingrese un n\243mero: ");
  10.         scanf("%d", &liNumero);
  11.     } while (liNumero != 0 && ++liContadora);
  12.  
  13.     //Procesamiento
  14.  
  15.     //Salida de datos
  16.     printf("\nCantidad de valores le\241dos: %d\n", liContadora);
  17.  
  18.     return 0;
  19. }

La comparación del while funciona así:

  • Primero se ejecuta la comparación liNumero!=0. Si ésta no se cumple, al ser una operación AND, el programa dejará de comparar y saldrá del while. (FALSE && X ) == FALSE
  • Si la condición se cumple, el programa necesita realizar la segunda comparación para saber si debe ejecutar el do-while de nuevo... en este caso hace un preincremento de liContadora. Como el valor inicial de liContadora es 0, el preincremento siempre valdrá 1 o más, que, al ser diferente de 0, hará que el compilador lo trate como si se tratase de un TRUE. Al final el contador se incrementa y el bucle se vuelve a ejecutar.


Un saludo

Última edición por eferion; 21/04/2015 a las 01:13