Доброго времени суток. Хочу в массив внести данные, при первой итерации все получается последующие просто выводят строки на экран и все. В чем проблема? Код (Text): struct student { char name[30]; int group; int mark[5]; }; student gruppa[10]; for (int i=0;i<10;i++) { cout<<"Student "<<i+1<<endl; cout<<"FIO: "; cin.get(gruppa[i].name,sizeof(gruppa[i].name)); cout<<"\n"; } getch(); return 0;
Замени на cin >> gruppa.name; Совместное использование iostream и stdio - дурной тон и источник ошибок.
Хотя std::cin >> gruppa.name - нельзя, потому что ты можешь вылезти за границу массива. Используй std::getline.
_DEN_ Спасибо, getline то что надо было, но в цикле добавил вводе еще номера группы и при второй и последующих итерациях ввод фамилии и инициалов стал пропускаться, почему так? Код (Text): for (int i=0;i<10;i++) { cout<<"Student "<<i+1<<endl; cout<<"FIO: "; cin.getline(gruppa[i].name,sizeof(gruppa[i].name)); cout<<"Group: "; cin.get(gruppa[i].group; }
Keva Да нет же, надо использовать свободный getline и name изменить с массива на std::string. std::getline(std::cin, gruppa.name, '\n'); А номер группы можно брать как std::cin >> gruppa.group; Мля, извини, точнее не скажу - я ща слишком пьян))))))))))))))))
_DEN_ проблема решена, добавил getline так сказать работающий в холостую, и получилось то что надо А тебе спасибо!
getch(); Совместное использование iostream и stdio - дурной тон и источник ошибок. May be... А как по-другому?
На чистом С++ задача может быть решена так: Код (Text): #include <iostream> #include <vector> #include <string> #include <algorithm> #include <iterator> using namespace std; typedef struct _Student { string Name; unsigned Group; vector<int> Mark; } Student; void insert(Student& student) { student.Mark.assign(5, 0); cout << "FIO: "; getline(cin, student.Name); // записываем имя из потока cout << "Group: "; cin >> student.Group; // группу cin.ignore(); } ostream& operator<<( ostream& ostr, const Student& st ) { return ostr << "FIO: " << st.Name << endl << "Group: " << st.Group << endl << "Mark: " << st.Mark[0] << endl << endl; } int main(int argc, char* argv[]) { vector<Student> students(10); // вектор из 10 студентов :) for_each(students.begin(), students.end(), insert); // заполняем // выводим результат copy(students.begin(), students.end(), ostream_iterator<Student>(cout)); cin.ignore(); return 0; }
//На правах оффтопа Интересный момент, который я достаточно давно обнаружил, когда сам с этим столкнулся. Когда человек уже кое-что знает о Си и программирует на нём, то при переходе на языки более высокого уровня(например С++) он всё равно будет мыслить низкоуровневыми конструкциями и писать код на С++, в плане идеологии, начнёт далеко не сразу.