2012-03-24 9 views
0

Unten ist der Code für eine Funktion, die ich verwende, um Schülerdaten in ein Array von Studentenstrukturen einzugeben. Ich möchte, dass die Schleife beendet wird, wenn ich das Limit (n) erreicht habe, was in Ordnung ist ODER, und das ist es, womit ich Probleme habe, wenn eine leere Zeile für einen Schülernamen eingegeben wird? Hat jemand irgendwelche Vorschläge? Die aktuelle Methode ich benutze funktioniert nicht (die if-Anweisung unter 'cin.getline (pa [i] .FullName, SLEN - 1);')So testen Sie eine leere Zeile mit cin

int getinfo(student pa[], int n) 
{ 
    cout << "\nPlease enter student details:\n\n"; 

    int i; 
    for (i = 0; i < n; i++) 
    { 
     cout << "Student " << (i + 1) << ": \n"; 
     cout << " > Full name: "; 
     cin.getline(pa[i].fullname, SLEN - 1); 
     if (pa[i].fullname == NULL) 
      continue; 
     cout << " > Hobby: "; 
     cin.getline(pa[i].hobby, SLEN - 1); 
     cout << " > OOP Level: "; 
     cin >> pa[i].ooplevel;; 
     cin.get(); 

     cout << endl; 
    } 

    cout << "--------------------------------------" << endl; 

    return i; 
} 
+0

fortzusetzen; sollte Pause sein; –

Antwort

1

besser mit string und mit einem Atom Loop:

std::string name, hobby, oop; 

std::cout << "Name: "; 
if (!(std::getline(std::cin, name)) { break; } 

std::cout << "Hobby: "; 
if (!(std::getline(std::cin, hobby)) { break; } 

std::cout << "OOP: "; 
if (!(std::getline(std::cin, oop)) { break; } 

// if we got here, everything succeeded. 
pa[i].name = name; pa[i].hobby = hobby; pa[i].oop = oop; 

// or better, pass a `std::vector<student> &`: 
pa.push_back(student(name, hobby, oop)); 
+0

Ich muss die Studentenstruktur unverändert verwenden, die ist: const int SLEN = 30; struct Schüler { \t char fullname [SLEN]; \t Char Hobby [SLEN]; \t Int O-Ebene; // levels 1-9 1 = Anfänger, 9 = Experte }; –

+0

Sie "müssen"? Was ist los? Sind das Hausaufgaben und du hast die Frage nicht als solche markiert? –

+0

Es war keine Hausaufgabe, es war Übung mit Strukturen. –

0

getline() eine leere Zeichenfolge für eine leere liest Linie. Beachten Sie, dass Sie immer überprüfen sollten, ob Ihre Eingabe erfolgreich war. Persönlich würde ich auch std::string verwenden.

+0

Welchen Code würde ich verwenden, um die Schleife zu unterbrechen, wenn eine leere Zeichenfolge gelesen wird? –

+0

Ich habe meine In-Anweisung wie folgt geändert: if (pa [i] .fullname [0] == '\ 0') break; Und es bricht jetzt, wenn nichts für den Schülernamen eingegeben wird Fühlen Sie sich wie diese sehr einfache Frage verdient keinen Platz im Internet! Sorry Leute und danke für deine Hilfe. –