Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » doppelte Zeileausgabe; debug

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
11.12.2017, 13:32 Uhr
Melero



Hallo zusammen,

ich bringe mir gerade aus reinem Interesse C++ bei (seit etwa 2 wochen), man möge mir also große Unwissenheiten nachsehen.

Ich versuche mir dann immer selber Aufgaben auszudenken, mit den verschiedenen Dingen, die ich so neu lerne. Also, ich find einfach den Fehler nicht, er spuckt mir bei der Abfrage, nach der Art der Kosten die Zeile 2mal hinterheinander aus und ich begreif nicht warum.
Vielleicht hat jemand Lust mal drüber zu schauen und mich an seiner Weisheit teilhaben zu lassen.
Vielen Dank.


C++:
#include <iostream>
#include <iomanip>
#include <vector>
#include <string>

using namespace std;

double sekundenkosten(const double &k, const int &t = 31536000)
{ double kostenfaktor;
  kostenfaktor = k / t;
  return kostenfaktor;
}





int main()
{

    
vector<double> insgesamtKosten;
double eingabe= 0.00, kostenfaktor =0.00;    
string weiter, def;
do {  
cout << "Kostenpunkt eingeben (j/n): ";
getline(cin, def);
}while (def !="j" && def !="n");

while(def == "j")
{
  cout <<"Betrag: ";
  cin >> eingabe;
  do{
  cout << "Sind: " << eingabe <<" monatliche(m), Jaehrliche(j)"; //das erscheint 2mal???  
  cout << ", oder Taegliche Kosten(t)";
getline(cin,weiter);
}while(weiter != "m" && weiter != "j" && weiter != "t");

if(weiter == "m"){
   eingabe *= 12;  
   kostenfaktor = sekundenkosten(eingabe);
   insgesamtKosten.push_back(kostenfaktor);
}

else if(weiter == "t"){
    eingabe *=365.25;
    kostenfaktor = sekundenkosten(eingabe);
    insgesamtKosten.push_back(kostenfaktor);
}
else if(weiter =="j"){
     kostenfaktor = sekundenkosten(eingabe);
insgesamtKosten.push_back(kostenfaktor);
}

  
do{
cout << "Kostenpunkt eingeben (j/n): ";
getline(cin, def);
}while (def !="j" && def !="n");
}
if(insgesamtKosten.empty())
return 0;

array<int,5> verrechneteKosten = {31536000, 2628000, 86400, 3600, 1 };
vector<vector<double>> tabelle;
tabelle.resize(insgesamtKosten.size());
for(unsigned int i=0; i<tabelle.size(); i++)    
tabelle.at(i).resize(verrechneteKosten.size());
for(unsigned int i=0; i<tabelle.size(); i++)
for(unsigned int k=0; k<tabelle.at(i).size(); k++)
tabelle.at(i).at(k) = insgesamtKosten.at(i)* verrechneteKosten.at(k);
cout << left << setw(17) << "Jahr" << setw(17) << "Monat"
<< setw(17) << "Tag" << setw(17) << "Stunde" << setw(17) << "Sekunde" << endl;
for(vector<double> &zeile:tabelle)
{
for(double &wert:zeile)
cout <<fixed << setprecision(2) <<left << setw (17) << wert << setw(17);
cout << endl;
}
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.12.2017, 19:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

einmal vorweg: bitte nutze deine IDE und lass dir den code sauber formatieren. lässt sich viel besser lesen, auch 80 Zeilen "umbrechen" tut man im normalfall auch nicht mehr (bzw nicht so wie du es gemacht hast)

Ansonsten: Das Problem ist vermutlich, das du einen double einliest - hierbei bleibt dein "return" das man zur Eingabe drücken muss, noch im puffer.


C++:
cout << "Betrag: ";
cin >> eingabe; // hier liest du den double

do {
    cout << "Sind: " << eingabe << " monatliche(m), Jaehrliche(j), oder Taegliche Kosten(t)";
    getline(cin,weiter); // hier liest du dadurch ein "\n", was du nicht abfängst in deiner while-bedingung

} while(weiter != "m" && weiter != "j" && weiter != "t");



Einfachste Möglichkeit: newline "weglesen":


C++:
#include <climits>

// ....

cout << "Betrag: ";
cin >> eingabe;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // "ignoriere" alle zeichen, die noch im eingabepuffer stehen bis zum nächsten return

do {
    cout << "Sind: " << eingabe << " monatliche(m), Jaehrliche(j), oder Taegliche Kosten(t)";
    getline(cin,weiter);

} while(weiter != "m" && weiter != "j" && weiter != "t");


--
class God : public ChuckNorris { };

Dieser Post wurde am 12.12.2017 um 19:20 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.12.2017, 10:06 Uhr
Melero



Hej,

vielen Dank für deine Antwort. Ich werd beim nächsten Mal auf bessere Lesbarkeit achten. Wußte bis eben nicht mal, dass es ein automatisches Formatieren gibt.

Ich habe versucht deine Lösung anzuwenden, bin aber leider daran gescheitert, dass die Befehlszeile undefiniert war, hatte aber #include <climits> eingebunden. Fisch halt noch sehr viel im Dunkeln. Mit der Information die du gegeben hast, konnte ich es dennoch auf eine andere Weise lösen.

Ich werde wohl erstmal weiter Bücher wälzen ;-)


C++:
char def, weiter;
    do {
        cout << "Kostenpunkt eingeben (j/n): ";
        cin >> def;
    } while (def != 'j' && def != 'n');

    while (def == 'j') {
        cout << "Betrag: ";
        cin >> eingabe;
        do {
            cout << "Sind " << eingabe << " monatliche(m), Jaehrliche(j), oder Taegliche Kosten(t)";
            cin >> weiter;

        } while (weiter != 'm' && weiter != 'j' && weiter != 't');


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: