• Sábado 27 de Abril de 2024, 03:05

Autor Tema:  Por qué no es portable este codigo?  (Leído 1262 veces)

Phas

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Por qué no es portable este codigo?
« en: Martes 16 de Marzo de 2010, 13:04 »
0
Por qué no es portable?

Código: C++
  1. #include <iostream>
  2. #include <iterator>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7. // Leer enteros por entrada y llevarlos a un vector e imprimir la salida.
  8.  
  9. int main ()
  10. {
  11.      cout << "Nota: Si introduce menos de 10 numeros, los restantes tendran valor cero";
  12.      cout << " hasta completar dicho tamanio." << endl;
  13.      cout << endl << "Vaya introduciendo los numeros para un vector de tamanio 10.";
  14.      cout << "Cuando se desee dejar de introducir numeros, presione <Ctrl+Z>." << endl << endl;
  15.      vector<int> v(10);
  16.      istream_iterator<int> in (cin); // Iterador de entrada
  17.      ostream_iterator<int> out(cout, " "); // Iterador de salida, indica como quieres separar
  18.      
  19.      // El copy tiene 3 parametros, los dos primeros dos ITERADORES de la primera
  20.      // estructura (origen) y otro ITERADOR para la estructura destino que nos dice
  21.      // desde donde queremos empezar a copiar en la estructura destino
  22.      copy (in, istream_iterator<int>(), v.begin());
  23.      // PRimer iterador, la entrada cin, segundo la marca de fin de fichero EOF,
  24.      // y tercero desde donde queremos copiar
  25.      cout << endl << endl << "El vector creado con el algoritmo generico copy es:" << endl << endl << "( ";
  26.      copy (v.begin(), v.end(), out);
  27.      cout << ")" << endl << endl;
  28.      
  29.      system("pause");
  30.      return 0;
  31. }
  32.  

killrazor

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Por qué no es portable este codigo?
« Respuesta #1 en: Martes 16 de Marzo de 2010, 17:12 »
0
Como sabes que no es portable? lo has intentado portar? A que plataforma(s)? Te da un error algun compilador?

jormar arellano

  • Nuevo Miembro
  • *
  • Mensajes: 10
  • Nacionalidad: ve
    • Ver Perfil
Re: Por qué no es portable este codigo?
« Respuesta #2 en: Martes 16 de Marzo de 2010, 17:19 »
0
Todo tu código es portable... salvo la linea del final:
Código: C++
  1. system("pause");
  2.  
La función como tal si es portable, pero su ejecución esta muy relacionada con el entorno donde se ejecuta. Esta función NO pausa la ejecución del programa, lo que hace es ejecutar un comando del shell, y usar su valor de retorno. El código, tal y como esta, compilará en cualquier plataforma. Si lo corres en Window, no tendrás ningún inconveniente, ya que ese comando (pause) existe en la consola, y detiene la ejecución del programa con un mensajito.

Si lo corres en linux, lo único que obtienes es un mensaje de error (sh: pause: not found), ya que este comando no existe en el shell de este sistema operativo (lo más parecido es: read -p "Dale a una tecla..." ). Cabe destacar que tu programa NO ABORTA inesperadamente, sólo imprime un mensaje de error. Por ejemplo, en este programita:
Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main()
  6. {  
  7.     system("pause");
  8.     printf("Esta linea también se imprime...n");
  9.     return 0;
  10. }
  11.  
  12.  
...imprime la siguiente salida (ejecutándolo desde una consola linux):

sh: pause: not found
Esta linea también se imprime...

Si realmente necesitas paralizar la ejecución del programa, usa una función como:
Código: C++
  1.  
  2. #include <stdio.h>
  3. ...
  4. getchar();
  5. ...
  6.  
  7.  
...o lee un caracter con "cin >> ..."