Newsgroup: it.comp.lang.c++
Titolo: standard

se scrivo un programma in c++ standard questa sarà letto indifferentemente
su ogni piattaforma? linux, dos o windows?
inoltre l'uso delle System("pause"); comporta la non portabilità su sistemi
linux?
esiste un modo per ovviare a ciò? il mio programma consta di almeno 3
instruzioni di pause nel modo descritto sopra, come posso renderlo portabile
al 100%?
grazie

 esiste un modo per ovviare a ciò?
Invece di System("pause");
std::cout << "Premi Invio per continuare..." << std::endl;
while (std::cin.get() != '\n');   <------ Nota il punto e virgola che fa da
istruzione nulla, infatti il while deve solo bloccare il programma fin
quando non premi invio.
ciao.
--
Luigi

 ha scritto nel messaggio
news:y4Qa9.107653$n04.2...@twister2.libero.it...


 quando non premi invio.
 ho provato, ma salta direttamente, senza fermarsi, come se ricevesse da
solo l'input. coma mai?
in questo modo funziona ma è standard?
    std::cin.ignore (255,'\n');
    cout << "Premi Invio per continuare..." << endl;
    while (std::cin.get() != '\n');
grazie a tutti

     while (std::cin.get() != '\n');
Bah, penso di si.. cmq è strano che salti. Il mio suggerimento è abbastanza
diffuso come soluzione all'arresto temporaneo del programma. Boh.
ciao
--
Luigi

     while (std::cin.get() != '\n');
E` standard, pero` funziona solo se il '\n' e` nei primi 255
caratteri.  Ti conviene usare:
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
        Mauro

Luigi, hai turbato la mia meditazione scrivendo questo:

il buffer di cin ha bisogno di essere pulito, poiché potrebbero esserci
caratteri
che falsano la funzione .get()
--
Lupin85©
FILSer #2 - Founder di #fils
"It is not important what you believe, only that you believe"

         Mauro
Capisco ma non ho mai visto o meglio, non hai letto su alcun libro tutto
quello che hai messo tra parentesi. potresti commentarmelo?
grazie

 quello che hai messo tra parentesi. potresti commentarmelo?
std::numeric_limits, definito in <limits>, e` un template che fornisce
informazioni sui tipi numerici del C++.
std::streamsize e` il tipo del primo parametro di ignore().
std::numeric_limits<std::streamsize> fornisce informazioni su std::streamsize.
std::numeric_limits<std::streamsize>::max() e` il valore massimo di
std::streamsize, e quindi e` anche il numero piu` grande che puoi
passare a ignore().
Esempio di uso di numeric_limits:
  #include <iostream>
  #include <limits>
  using std::cout;
  template <typename T>
  void print_info()
  {
    typedef std::numeric_limits<T> limits;
    if (limits::is_signed)  cout << "Tipo con segno\n";
    else cout << "Tipo senza segno\n";
    cout << "Valore minimo: " << limits::min() << '\n';
    cout << "Valore massimo: " << limits::max() << '\n';
    cout << "Numero di bit (escluso eventuale bit di segno): " 
         << limits::digits << '\n';
    cout << "Numero di cifre (decimali): " << limits::digits10 << '\n';
    cout << "\n";
  }
  int main()
  {
    cout << "***  int  ***\n";
    print_info<int>();
    cout << "***  unsigned long  ***\n";
    print_info<unsigned long>();
    cout << "***  double  ***\n";
    print_info<double>();
    cout << "***  std::streamsize  ***\n";
    print_info<std::streamsize>();
  }  
        Mauro

 ha scritto nel messaggio
news:87r8ggd...@localhost.localdomain...


 ne hai uno per me da consigliarmi, intendo.
Per questo tipo di problemi "The C++ Standard Library" di Nicolai
Josuttis e' praticamente perfetto.
Ciao,
Nicola