2017-12-19 1 views
0
#include<iostream> 
#include<string> 
#include<cstring> 

using namespace std; 
void cpp_string(); 
void cstyle_string(); 

int main() 
{ 
    cpp_string(); 
    cstyle_string(); 

    system("pause"); 
    return 0; 
} 

void cpp_string() 
{ 
    string fName, lName; 
    char grade; 
    int age; 

    cout << "What is your first name?"; 
    getline(cin, fName); 
    cout << "What is your last name?"; 
    getline(cin, lName); 
    cout << "What letter grade do you deserve?"; 
    cin >> grade; 
    cout << "What is your age?"; 
    cin >> age; 

    cout << "Name: " << fName << ", " << lName << endl; 
    cout << "Grade: " << grade << endl; 
    cout << "Age: " << age << endl; 

    return; 
} 

void cstyle_string() 
{ 
    char fNm[20], lNm[20]; 
    char grade; 
    int age; 

    cout << "What is your first name?"; 
    cin.get(fNm, 20).get(); 
    cin.clear(); 
    cout << "What is your last name?"; 
    cin.get(lNm, 20).get(); 
    cout << "What letter grade do you deserve?"; 
    cin >> grade; 
    cout << "What is your age?"; 
    cin >> age; 

    cout << "Name: " << fNm << ", " << lNm << endl; 
    cout << "Grade: " << grade << endl; 
    cout << "Age: " << age << endl; 

    return; 
} 

Ich erhalte Ausgabe alsLaufzeitfehler von cin.get()

What is your first name?demiurge conon 
What is your last name?no 
What letter grade do you deserve?a 
What is your age?22 
Name: demiurge conon, no 
Grade: a 
Age: 22 
What is your first name?What is your last name?What letter grade do you deserve?What is your age?Name: , 
Grade: ╠ 
Age: -858993460 
Press any key to continue . . . 

aber wenn ich cstyle_string() in verschiedenen Datei laufen dann immer ich keine Fehler Code perfekt funktioniert.

Ich möchte wissen, warum das passiert?

+1

Sie rufen sowohl 'cpp_string()' als auch 'cstyle_string()' auf. Ruf immer nur eins an. Weil sie die Eingabe verbrauchen. – rustyx

+0

Sie laufen beide zu verschiedenen Zeiten .... Ich meine, zuerst cpp_string() wird dann laufen, nachdem es zurückkehrt, wird cstyle_string() ausgeführt. Es hat gut funktioniert, als ich cin.get() in cpp_string() nicht verwendet habe. Davor habe ich cin >> fname für die Eingabe verwendet und es hat gut funktioniert, aber es braucht nur ein einzelnes Wort, also habe ich get() verwendet, um eine Zeile von Zeichen zu erhalten. Jetzt funktioniert der Code nicht. –

Antwort

1

Es gibt zwei Fragen.

  1. Redundant \n

  2. der Zustand des cin

Die letzte cin in cpp_stringcin >> age ist.

Es wird eine \n nicht extrahiert werden.

In ersten cstyle_string ist cin.get(fNm, 20).get();

Das begrenzende Zeichen nicht aus der Eingangssequenz extrahiert, wenn gefunden wird, und bleibt dort als das nächste Zeichen aus dem

die cin.get(FNm, 20) Strom extrahiert werden, Parsen leere Eingabe vor \n, und tatsächlich sind keine Zeichen im Stream verfügbar. In diesem Fall wird das Failbit Flag gesetzt und als nächstes wird der cin >> Operator fehlschlagen.

Sie können nur anrufen cstyle_string und drücken Sie die Eingabetaste direkt, das gleiche wird passieren.

+0

Danke, neue Zeile muss ignoriert werden. so verwendet diese Zeile cin.ignore (numeric_limits :: max(), '\ n'); vor dem ersten cout in cstyle_string(), jetzt funktioniert es gut. –