Программирование на c++ - Вопросы по С+

Вопрос Программирование на c++

Регистрация
28 Дек 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
Нужно заполнить информацию о студентах и вывести список студентов одного и того же курса, но проблема в том,что после написания ФИО 1ого студента программа завершается и остальная информация остается незаполненной. (помогите пж я просто ток недавно начал программирование изучать)
308788314_3ae5c612822aff51c00f1d072dfa4410_800.png



#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 << "Введите номер курса для вывода списка студентов: ";

cin >> selectedKurs;

cout << "Список студентов " << selectedKurs << " курса:" << endl;

for (int i = 0; i < n; ++i) {

if (por.kurs == selectedKurs) {

cout << "ФИО: " << por.fio << ", Адрес: " << por.adres << ", Телефон: " << por.telefon << ", Группа: " << por.gruppa << ", Оценки: " << por.grades << endl;

}

}



return 0;

}
 
Регистрация
29 Сен 2012
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
#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(); // Очистка буфера после ввода числа

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

return 0;
}
 
Регистрация
24 Окт 2013
Сообщения
72
Репутация
0
Спасибо
0
Монет
0
Проблема в вашем коде заключается в том, что для полей структуры 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 для ввода строки с пробелами

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

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

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

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

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

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

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

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

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

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

После ввода чисел cin оставляет символ новой строки, который может помешать getline. cin.ignore устраняет эту проблему.
Теперь программа работает корректно, запрашивает данные о каждом студенте, а затем выводит список студентов, принадлежащих указанному курсу.
 
Регистрация
12 Апр 2013
Сообщения
74
Репутация
0
Спасибо
0
Монет
0
цикл в цикле надо делать: for{bla-bla
for{blal-bla
}} Расписывать не буду. Лень.
 
Сверху Снизу