Dev-C++ no muestra el valor esperado

Iniciado por snoopty, 31 Agosto 2021, 08:02 AM

0 Miembros y 1 Visitante están viendo este tema.

snoopty

Hola Moderadores y Foreros !
Al siguiente Código le cambio valores al for(   int i = 0;   i<=10;   i = i + 1 ), pero me sigue dando 16 - previamente le dí valores al FOR para que sí me muestre x pantalla " 16 " ; lo increíble es que si es un problema de buffer, no entiendo porqué SÍ respeta que cambie las coordenadas a gotoxy(3,19); y los valores del FOR ..... no !!! cada vez que modifico y compilo. Les comento que tengo la última versión Dev-C++ Embarcadero y también la 5.11( será ése el conflicto ??? )
Aquí, el Código =
#include <iostream> 
#include <windows.h>

using namespace std;

void gotoxy(int x,int y)


     
    
     HANDLE hcon; 
      hcon = GetStdHandle(STD_OUTPUT_HANDLE); 
      COORD dwPos; 
      dwPos.X = x; 
      dwPos.Y= y; 
      SetConsoleCursorPosition(hcon,dwPos); 


int main()

{     
    
      int i;
     for(   int i = 0;   i<=10;   i = i + 1 )
   
   
               gotoxy(3,19);
      
      {
             
            cout<<i<<"\n";
               
        }
    
     return(0); 
    
}

/* Gracias por leer el mensaje */

Eternal Idol

#1
El problema no es el entorno, es el codigo.

Hay dos variables i, una solo tiene ambito dentro del bucle for y el mismo solo tiene una sentencia (la de gotoxy), despues tenes un bloque de codigo (las llaves ahi no cumplen ninguna funcion mas que la de agrupar, las podrias sacar y el codigo generado seria exactamente el mismo) que se ejecuta una sola vez y que empuja una variable i sin inicializar en cout.

gotoxy(3,19);
for (int i = 0; i <= 10;  ++i)
   cout << i << endl;



VC++ al compilar te da un aviso:
c:\src\???.cpp(31) : warning C4700: uninitialized local variable 'i' used
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

snoopty

#2
Hola ! Probé todo lo que me dijiste y no me arroja errores PERO el Código no hace lo que yo busco, que es " Forzar " a que el conteo no muestre un Nro debajo del otro desde 0 a 10; lo que busco es que el Ciclo FOR a partir del gotoxy que le doy, " muestre todo el cálculo dentro de la misma posición, es decir, QUE DIRECTAMENTE me aparezca sólo el número 10 en el gotoxy que yo le indique. 
Y de hecho lo logré cuando me apareció - sin las modificaciones que me sugeriste - el 16 únicamente en el gotoxy que propuse -, PERO no había caso como expliqué, de alterar los valores del FOR, y que me aparezca un nuevo valor.

Respecto del Visual C ++ no lo tengo instalado; Sólo tengo el Dev-C++ y en ninguna de las dos versiones instaladas arroja el error que mencionaste; aparece " el 16 " y no arroja ni Warning ni error.

Aquí el Código como quedó después de lo que me propusiste ( notá que SOLAMENTE el " 0 " respeta el gotoxy(3,19) .... debajo, desde el 1 hasta el 10 ningún valor respeta el gotoxy =

#include <iostream> 
#include <windows.h>

using namespace std;

void gotoxy(int x,int y)


     
    
     HANDLE hcon; 
      hcon = GetStdHandle(STD_OUTPUT_HANDLE); 
      COORD dwPos; 
      dwPos.X = x; 
      dwPos.Y= y; 
      SetConsoleCursorPosition(hcon,dwPos); 


int main()
{

   gotoxy(3,19);
/* {  En foro me dicen q quite esto */     
    
/* int i; En foro me dicen q quite esto */     
   for(   int i = 0;   i<=10;   /* En foro ... i = i + 1 */  ++i  )
   
   
/* gotoxy(3,19); En foro me dicen que lo ponga arriba del for */
      
/* { En foro me dicen q quite esto */      
             
            cout<<i<<endl;
               
        {
       
         
     return(0); 
   }
}

/* Gracias por reponderme */



 

Eternal Idol

#3
Eso ya era otro problema en tu codigo de base, usaste \n que es un salto de linea y tenes que comprender que no lo lograste en ningun momento, tu bucle solamente llamaba a gotoxy en cada iteracion, nada mas, el cout estaba fuera del bucle y usaba otra variable i no inicializada. Ese 16 era una casualidad, podia ser cualquier valor y en mi caso era 0 por ejemplo.

Esto supongo que si hace lo que querias:
Código (c++) [Seleccionar]
for (int i = 0; i <= 10; ++i)
{
    gotoxy(3,19);
   cout << i << "\r";
}
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

snoopty

Funcionó !!! Muchas gracias Eternal Idol !

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón