2016-09-12 2 views
0

初めて関数を呼び出すと正常に動作します。ベクトルが正常に機能しない関数

しかし、2回目に関数を呼び出すと、コードの最初の部分にジャンプします。ここで、vec_nameベクタに新しい名前を追加しようとしています。私をforループに送ります。

void addNewStudent(int num) 
{ 
    string name; 
    cout << "Add new student" << endl; 
    cout << "Name : "; 
    getline(cin, name); 

    vec_name.push_back(name); 

    float avg = 0; 
    for (int i = 1; i <= num; i++) 
    { 
     float temp; 
     cout << endl << "Enter " << i << " grade : "; 
     cin >> temp; 
     avg += temp; 
    } 
    avg /= num; 

    vec_avg.push_back(avg); 
} 

私は間違っていますか?

関数の最後にcin.ignore()を追加しました。

cin >> temp >> skipws; 

void addNewStudent(int num) 
{ 
    string name; 
    cout << "Add new student" << endl; 
    cout << "Name : "; 

    getline(cin, name); 

    vec_name.push_back(name); 

    float avg = 0; 
    for (int i = 1; i <= num; i++) 
    { 
     float temp; 
     cout << endl << "Enter " << i << " grade : "; 
     cin >> temp; 
     avg += temp; 
    } 
    avg /= num; 

    vec_avg.push_back(avg); 

    cin.ignore(); 
} 

答えて

1

変更

cin >> temp; 

(最初の関数呼び出しの)cin後(第2の関数呼び出しで)getlineを呼び出すと、空の文字列(の改行を読み取り前のcin)。 skipwsを使用すると問題が解決されます。

+0

それは助けにはなりませんでしたが、あなたの答えを読んだ後、私はcin.ignore()tnxを発見しました – user3350597

+0

うんん、または 'cin.clear();'。しかし、 'skipws'は通常動作します。@ user3350597 – AhmadWabbi

関連する問題