Нужно заполнить информацию о студентах и вывести список студентов одного и того же курса, но проблема в том,что после написания ФИО 1ого студента программа завершается и остальная информация остается незаполненной. (помогите пж я просто ток недавно начал программирование изучать)
#include <iostream>
using namespace std;
struct info_student {
int fio;
int adres;
int telefon;
int kurs;
int gruppa;
int grades;
};
int main() {
setlocale(LC_ALL, "RUS"
int n;
cout << "Введите количество студентов: ";
cin >> n;
info_student por[15];
int FIO[20];
for (int i = 0; i < n; ++i) {
cout << "Информация о студенте " << i + 1 << ":" << endl;
cout << "ФИО: " << endl;
cin >> por.fio;
cout << "Адрес: " << endl;
cin >> por.adres;
cout << "Телефон: " << endl;
cin >> por.telefon;
cout << "Курс: " << endl;
cin >> por.kurs;
cout << "Группа: " << endl;
cin >> por.gruppa;
cout << "Оценки: "<<endl;
cin >> por.grades;
}
int selectedKurs;
cout << "Введите номер курса для вывода списка студентов: ";
#include <iostream>
#include <string>
using namespace std;
struct info_student {
string fio;
string adres;
string telefon;
int kurs;
int gruppa;
string grades;
};
int main() {
setlocale(LC_ALL, "RUS"
int n;
cout << "Введите количество студентов: ";
cin >> n;
cin.ignore(); // Очистка буфера после ввода числа
info_student por[15];
for (int i = 0; i < n; ++i) {
cout << "Информация о студенте " << i + 1 << ":" << endl;
cout << "ФИО: ";
getline(cin, por.fio);
cout << "Адрес: ";
getline(cin, por.adres);
cout << "Телефон: ";
getline(cin, por.telefon);
cout << "Курс: ";
cin >> por.kurs;
cin.ignore(); // Очистка буфера после ввода числа
cout << "Группа: ";
cin >> por.gruppa;
cin.ignore(); // Очистка буфера после ввода числа
cout << "Оценки: ";
getline(cin, por.grades);
}
int selectedKurs;
cout << "Введите номер курса для вывода списка студентов: ";
cin >> selectedKurs;
cin.ignore(); // Очистка буфера после ввода числа
Проблема в вашем коде заключается в том, что для полей структуры info_student (таких как fio, adres и т.д.) вы используете тип int, тогда как fio (ФИО) и, возможно, adres должны быть строками. Когда вы вводите данные, программа пытается считать строку как число, что вызывает некорректное поведение.
Вот исправленный вариант программы:
#include <iostream>
#include <string>
using namespace std;
struct info_student {
string fio; // ФИО — строка
string adres; // Адрес — строка
string telefon; // Телефон — строка
int kurs; // Курс — число
int gruppa; // Группа — число
float grades; // Оценки — дробное число, если средний балл
};
int main() {
setlocale(LC_ALL, "RUS"
int n;
cout << "Введите количество студентов: ";
cin >> n;
// Создаём массив для хранения информации о студентах
info_student por[15];
// Ввод информации о студентах
for (int i = 0; i < n; ++i) {
cin.ignore(); // Чтобы убрать остатки символов от предыдущего ввода
cout << "Информация о студенте " << i + 1 << ":" << endl;
cout << "ФИО: ";
getline(cin, por.fio); // Используем getline для ввода строки с пробелами
// Ввод номера курса для фильтрации
int selectedKurs;
cout << "Введите номер курса для вывода списка студентов: ";
cin >> selectedKurs;
fio, adres и telefon изменены на string, так как они содержат текст.
grades — изменён на float, так как оценки могут быть дробными (например, 4.5).
Использование getline для строк:
Вместо cin для ввода fio и других текстовых полей используется getline(cin, ...). Это позволяет корректно вводить строки с пробелами.
cin.ignore для устранения проблем со строками:
После ввода чисел cin оставляет символ новой строки, который может помешать getline. cin.ignore устраняет эту проблему.
Теперь программа работает корректно, запрашивает данные о каждом студенте, а затем выводит список студентов, принадлежащих указанному курсу.