Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » *argv[] to double

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.12.2008, 01:37 Uhr
~Irods
Gast



C++:
#include <iostream>
#include <string>
using namespace std;

int main( int argc, char *argv[])
{

    if( argc != 4 )
    {
        cerr<<"Benutzung: geld kapital zinsen jahre"<<endl;
        
        cin.clear();
        cin.sync();
        cin.get();
        return 0;
    }

    double kapital=static_cast<double>(*argv[1]);
    double zinsen=static_cast<double>(*argv[2]);
    int    jahren=static_cast<int>(*argv[3]);
    cout<<kapital<<" "<<zinsen<<" "<<jahren<<endl;    
/*   for ( int i=0 ; jahren==i ; ++i )
    {
        kapital = (kapital*(1+(zinsen/100)));
        cout<<"Im Jahr "<<i<<" "<<kapital<<endl;
    }
*/

    cin.clear();
    cin.sync();
    cin.get();
    return 1;
}



Hi ich habe warscheinlich oben einen ziehmlich blöden fehler gemacht fakt ist das in kapital, zinsen und jahren nicht die richtigen werte haben. plz help
schon ma thx
bye
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.12.2008, 04:36 Uhr
0xdeadbeef
Gott
(Operator)


Einfach casten bringt dich da nicht weiter, damit wandelst du nur die Speicheradressen in floats um, wobei natürlich Unfug rauskommt.

In C++ parst man den Kram üblicherweise mit stringstream raus, also etwa:

C++:
#include <sstream>
#include <string>

int main() {
  char const s[] = "3.14159";
  double d;
  std::istringstream in;

  in.str(s);
  if(in >> d) {
    // d ist jetzt 3.14159
  } else {
    // s konnte nicht geparst werden (z.B., wenn s "abc" wäre)
  }
}


In diesem speziellen Fall könntest du allerdings auch auf atof aus <cstdlib> zurückgreifen:

C++:
#include <cstdlib>

int main() {
  char const s[] = "3.14159";
  double d = std::atof(s);
}


Dazu ist allerdings anzumerken, dass atof, wenn der String nicht geparst werden kann (also etwa atof("abc")), Null zurückgibt, was für eine Fehlerbehandlung ausgesprochen unpraktisch sein kann.

Außerdem funktioniert die Stringstream-Variante unverändert mit std::string, atof erwartet einen C-String, dementsprechend müsstest du in dem Zusammenhang die c_str()-Methode benutzen.

Ich würde für sowas wohl eine Funktionsvorlage verwenden, etwa

C++:
template<typename to, typename from> to convert(from const &data) {
  std::istringstream in;
  to result;

  in << data;
  in >> result;

  // Fehlerbehandlung ggf. hier, etwa
  // if(!in) throw data;

  return result;
}

// ...
try {
  double d = convert<double>("3.14159");
} catch(...) {
  // Umwandlung fehlgeschlagen
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 21.12.2008 um 04:43 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: