C++, suche Tutorial

Hey Silent - ich habe eine Lösung gefunden:
du musst in der abfrage auf cin.fail() noch folgendes einfügen:
cin.clear();
cin.ignore();

also statt:
Code:
if(cin.fail())
{
    cout << "Einlesen fehlgeschlagen" << endl;
}
Code:
if(cin.fail())
{
    cin.clear();
    cin.ignore();
    cout << "Einlesen fehlgeschlagen" << endl;
}
Das löscht dir dann das Fehlerbit und die nächsten Abfragen funktionieren wieder!

Außerdem würd ich die ganze Abfrage in eine kleine Schleife packen:
Code:
int eingabe;

cout<<"Bitte eine Zahl eingeben:\n";
cin >> eingabe;
while(cin.fail() )
{
    cin.clear();
    cin.ignore();
    cout<<"Keine Zahl!\nBitte erneut eingeben:\n";
    cin>>eingabe;
}
Somit hast du dann am Ende immer eine gültige Eingabe :daumen:

mfg max00

EDIT: Und die Zeile:
Code:
MeineBestellung.MeineLieferanschrift.MeinLand = static_cast<land>(Landcode);
gehört nach dem Einlesen von "Landcode" eingefügt!
 
Zuletzt bearbeitet:
Nach dem einlesen ? Wo muss ich da etwas ändern ?
Thx für die andere Antwort, aber das ändert immer noch nichts daran, dass die Kreditkartendaten nicht abgefragt werden.
Trotzdem danke.


Grüße
silent12
 
Interessant, bei mir werden die Kreditkartendaten normal abgefragt - auch mit dem Quelltext den du gepostet hast...
 
Also so sieht es jetzt bei mir aus. Hast du auch genau das eingegeben ?




#include<iostream>
#include<string>
using namespace std;

enum land
{
Deutschland=0, Oesterreich, Schweiz, England, Frankreich
};


struct Lieferanschrift
{
string Vorname;
string Nachname;
string Strasse;
int Hausnummer;
int Postleitzahl;
string Ort;
land MeinLand;
};




struct Kreditkartendaten
{ int Kreditkartennummer;
int KreditkartenGueltigkeitsdatum;
};


struct Bestellung
{ Lieferanschrift MeineLieferanschrift;
Kreditkartendaten MeineKreditkartendaten;
string bestellteWare;
};









int main()
{
Bestellung MeineBestellung;
Kreditkartendaten MeineKreditkartendaten;
Lieferanschrift MeineLieferanschrift;
int Landcode;



MeineBestellung.MeineLieferanschrift.MeinLand = static_cast<land>(Landcode);
string bestellteWare;

cout <<"Geben sie Ihre zu bestellende Ware ein" << endl;
cin >> MeineBestellung.bestellteWare;
if(cin.fail())
{
cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}


cout <<"Geben sie Ihren Vornamen ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Vorname;
if(cin.fail())
{cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihren Nachnamen ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Nachname;
if(cin.fail())
{cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihre Strasse ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Strasse;
if(cin.fail())
{cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihre Hausnummer ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Hausnummer;
if(cin.fail())
{cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihre Postleitzahl ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Postleitzahl;
if(cin.fail())
{cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihren Ort ein" << endl;
cin >> MeineBestellung.MeineLieferanschrift.Ort;
if(cin.fail())
{cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}
cout <<"Geben sie Ihr Land ein" << endl;
cin >> Landcode;
if(cin.fail())
{cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}
if(cin.fail())
{cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}


cout <<"Geben sie Ihre Kreditkartennummer ein" << endl;
cin >> MeineBestellung.MeineKreditkartendaten.Kreditkartennummer;
if(cin.fail())
{cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}

cout <<"Geben sie Ihr Kredikarten Gültigkeitsdatum ein" << endl;
cin >> MeineBestellung.MeineKreditkartendaten.KreditkartenGueltigkeitsdatum;
if(cin.fail())
{cin.clear();
cin.ignore();
cout << "Einlesen fehlgeschlagen" << endl;
}

cout <<"Ihre Bestellung:" <<endl;
cout <<"Name:" << MeineBestellung.MeineLieferanschrift.Vorname << " " << MeineBestellung.MeineLieferanschrift.Nachname << endl;
cout <<"Adresse:" << MeineBestellung.MeineLieferanschrift.Strasse << " " << MeineBestellung.MeineLieferanschrift.Hausnummer <<" " << MeineBestellung.MeineLieferanschrift.Postleitzahl << " " << MeineBestellung.MeineLieferanschrift.Ort << " " << Landcode << endl;
cout <<"Kreditkartendaten:" << MeineBestellung.MeineKreditkartendaten.Kreditkartennummer <<" "<< MeineBestellung.MeineKreditkartendaten.KreditkartenGueltigkeitsdatum << endl;
system("Pause");
}


Grüße
silent12
 
Bei mir kompiliert das (VS2008). Ich musste allerdings die Leerzeichen aus solchen Dingen entfernen:
Code:
MeineBestellung.MeineKreditkartendaten.Kreditkart[B]e  n[/B]nummer
also
Code:
MeineBestellung.MeineKreditkartendaten.Kreditkart[B]en[/B]nummer
 
Ok zumindest habe ich die Funktionsweise kapiert. Nun bin ich beim Thema "Zeiger" angekommen.

Meine Aufgabe:
Erstellen Sie eine C++-Anwendung, in der Sie dynamisch ein eindimensionales Array vom Typ short erstellen. Der Anwender Ihres Programms soll angeben können, aus wie vielen Elementen das Array bestehen soll. Legen Sie abwechselnd in alle Elemente des Arrays die Zahlen 0 und 1 hinein und geben Sie danach den Inhalt des Arrays auf den Bildschirm aus.

Mein Anfang sieht so aus:

#include <string>
#include <iostream>

short Array;

int main()
{
int i;

cout << "Wie viele Array-Elemente moechten Sie speichern? " <<flush;
cin >> i;

Array* arrays = new Array;

for (int b = 0; b < i; ++b)
{ .......


Nun meine Frage: Wie und was genau muss ich in der Klammer nun bestimmen ?


Grüße
silent12
 
Zuletzt bearbeitet:
Zurück