Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование на C++

Dj Arbuz Ученик (142), на голосовании 4 дня назад
Нужно заполнить информацию о студентах и вывести список студентов одного и того же курса, но проблема в том,что после написания ФИО 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[i].fio;
cout << "Адрес: " << endl;
cin >> por[i].adres;
cout << "Телефон: " << endl;
cin >> por[i].telefon;
cout << "Курс: " << endl;
cin >> por[i].kurs;
cout << "Группа: " << endl;
cin >> por[i].gruppa;
cout << "Оценки: "<<endl;
cin >> por[i].grades;


}

int selectedKurs;
cout << "Введите номер курса для вывода списка студентов: ";
cin >> selectedKurs;
cout << "Список студентов " << selectedKurs << " курса:" << endl;
for (int i = 0; i < n; ++i) {
if (por[i].kurs == selectedKurs) {
cout << "ФИО: " << por[i].fio << ", Адрес: " << por[i].adres << ", Телефон: " << por[i].telefon << ", Группа: " << por[i].gruppa << ", Оценки: " << por[i].grades << endl;
}
}

return 0;
}
Голосование за лучший ответ
Данил Ласый Просветленный (37357) 1 месяц назад
цикл в цикле надо делать: for{bla-bla
for{blal-bla
}} Расписывать не буду. Лень.
alternativeGod Гуру (4164) 1 месяц назад
Проблема в вашем коде заключается в том, что для полей структуры 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[i].fio); // Используем getline для ввода строки с пробелами

cout << "Адрес: ";
getline(cin, por[i].adres);

cout << "Телефон: ";
getline(cin, por[i].telefon);

cout << "Курс: ";
cin >> por[i].kurs;

cout << "Группа: ";
cin >> por[i].gruppa;

cout << "Оценки (средний балл): ";
cin >> por[i].grades;
}

// Ввод номера курса для фильтрации
int selectedKurs;
cout << "Введите номер курса для вывода списка студентов: ";
cin >> selectedKurs;

// Вывод студентов, принадлежащих указанному курсу
cout << "Список студентов " << selectedKurs << " курса:" << endl;
for (int i = 0; i < n; ++i) {
if (por[i].kurs == selectedKurs) {
cout << "ФИО: " << por[i].fio
<< ", Адрес: " << por[i].adres
<< ", Телефон: " << por[i].telefon
<< ", Группа: " << por[i].gruppa
<< ", Оценки: " << por[i].grades << endl;
}
}

return 0;
}
Исправления:
Типы данных:

fio, adres и telefon изменены на string, так как они содержат текст.
grades — изменён на float, так как оценки могут быть дробными (например, 4.5).
Использование getline для строк:

Вместо cin для ввода fio и других текстовых полей используется getline(cin, ...). Это позволяет корректно вводить строки с пробелами.
cin.ignore для устранения проблем со строками:

После ввода чисел cin оставляет символ новой строки, который может помешать getline. cin.ignore устраняет эту проблему.
Теперь программа работает корректно, запрашивает данные о каждом студенте, а затем выводит список студентов, принадлежащих указанному курсу.
Dj ArbuzУченик (142) 1 месяц назад
таже фигня происходит
alternativeGod Гуру (4164) Dj Arbuz, тогда извините, если не так
Dj ArbuzУченик (142) 1 месяц назад
да ничего, все равно спасибо
Роман Орлов Ученик (140) 1 месяц назад
#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[i].fio);
cout << "Адрес: ";
getline(cin, por[i].adres);
cout << "Телефон: ";
getline(cin, por[i].telefon);
cout << "Курс: ";
cin >> por[i].kurs;
cin.ignore(); // Очистка буфера после ввода числа
cout << "Группа: ";
cin >> por[i].gruppa;
cin.ignore(); // Очистка буфера после ввода числа
cout << "Оценки: ";
getline(cin, por[i].grades);
}

int selectedKurs;
cout << "Введите номер курса для вывода списка студентов: ";
cin >> selectedKurs;
cin.ignore(); // Очистка буфера после ввода числа

cout << "Список студентов " << selectedKurs << " курса:" << endl;
for (int i = 0; i < n; ++i) {
if (por[i].kurs == selectedKurs) {
cout << "ФИО: " << por[i].fio << ", Адрес: " << por[i].adres << ", Телефон: " << por[i].telefon << ", Группа: " << por[i].gruppa << ", Оценки: " << por[i].grades << endl;
}
}

return 0;
}
Похожие вопросы