Малко помощ със C++

McFly

Registered
Не успях да намеря раздел за C++, та ще си постна тука за по-сигурно.

Започнах една програма, в която трябва да се въведат данни за студенти и т.н. По принцип нямам сериозен проблем, но се получава нещо, което не мога да разбера и поправя, затова ми е нужна малко помощ. Може би getline не е удачният вариант в случая, но не съм сигурен и така...

Ето какво ми се получава. Първият път цикълът ми се изпълнява добре, но след това ми прескача Ime и ми се лепва до Familia.

2689084d02f13469.gif


Код:
#include <iostream>
#include <iostream>
using namespace std;
int const S = 5;

struct studentData {
    string name;
    string surname;
    double points;
    double grade;
};

int main() {
    studentData student[S];

    for (int i=0; i<S; i++) {
        cout << "Vavedete danni za student " << i+1;
        cout << "\n---------------------------" << endl;

        cout << "\nIme: \t\t";
        getline(cin, student[i].name);

        cout << "\nFamilia: \t";
        getline(cin, student[i].surname);

        do {
            cout << "\nTochki (0-25): \t";
            cin >> student[i].points;
        } while(student[i].points > 25 || student[i].points <0);

        do {
            cout << "\nOcenka: \t";
            cin >> student[i].grade;
        } while(student[i].grade > 6 || student[i].grade < 2);

        cout << endl << endl;
    }

    return 0;
}
 
Изглежда сякаш в буфера остава '\n', но от къде? До колкото знам getline не би трябвало да прави такива проблеми. Пробвай да сложиш следния ред в края на for-а (или в началото), за да изчистиш буфера! :wink:
Код:
while (cin.get() != '\n');
 
Виж това :
http://stackoverflow.com/questions/7788176/how-do-i-make-getline-get-answers-for-every-time-through?answertab=votes#tab-top

getline оставя нов ред, което ти пречи при следващото завъртане и четене. Или ползвай cin >> или пък добави преди края на цикъла :

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
 

Back
Горе