2016-06-18 13 views
-4

Ich lerne C++ und kam zu diesem Problem. Könnte mir jemand erklären, warum meine Lösung nicht funktioniert? Hier ist mein Code und das Problem:Verständnis Cin Verhalten in C++

struct Pizza { 
    char company[30]; 
    double size; 
    int weight; 
}; 

int main() { 
    Pizza *test = new Pizza; 

    cout << "Enter size: "; 

    //from Internet, works 
    (cin >> test->size).get(); 

    //my idea, doesnt work, why ? 
    cin >> test->size; 

    cout << "Enter company: "; 
    cin.get(test->company, 30); 
    cout << "Enter weight: "; 
    cin >> test->weight; 
    cout << "Company: " << test->company<< " \nSize: " 
     << test->size << " \nWeight: " << test->weight << endl; 
    delete test; 
    cin.get(); 
    cin.get(); 
    return 0; 
} 
+0

Was ist der Punkt in einen Zeiger verwenden und neu/löscht, statt einem regulären lokalen Variable? Das ist die falsche Art C++ zu lernen. Deine Frage hat nichts mit * dynamic * zu tun –

+0

Wenn du denkst, dass es etwas mit "dynamischen Strukturen" zu tun hat, warum nicht ohne sie versuchen und sehen, ob das Problem verschwindet? – juanchopanza

+0

Es war Übung aus einem Buch über C++. Jetzt sehe ich, dass das Problem nicht bei struct selbst liegt, sondern bei meinem fehlenden Wissen über cin object. – Palum

Antwort

0

cin >> test->size; funktioniert perfekt :)

Der Grund, warum Sie denkendas ist, weil es noch eine neue Linie \n im Strom sein würde. Danach, wenn Sie cin.get(test->company, 30);, liest es den Stream und kehrt sofort zurück, weil es die neue Zeile gelesen hat.

Aber wenn Sie std::cin.get() aufrufen, liest es ein Zeichen, die neue Zeile, und verwirft es aus dem Stream, so dass der Stream leer ist, und Sie können den Firmennamen eingeben.

Man könnte es auch danach rufen:

cin >> test.size(); 
cin.get();