Непонятные сбои в консольной программе [закрыт]

280
29 сентября 2021, 15:00
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.

Закрыт 1 год назад.

Улучшить вопрос

Дана задача: В населеном пункте проживает N человек, о каждом известно фамилия, возвраст и пол. Ввести информацию о жителях данного пункта и посчитать количество женщин и мужчин. Вывести информацию о среднем возврасте мужчин и женщин. Вывести фамилии тех мужчин/женщин, чей возвраст выше/ниже среднего.

Обязательно использовать структуру.

После ввода Фамилии происходит такая проблема:

ПОЯСНЕНИЯ К КОДУ: ПЕРЕМЕННЫЕ f-количество женщин m-количество мужчин age_m-средний возвраст мужчин age_f-средний возвраст женщин

Вот код:

#include <iostream>
using namespace std;
struct Vilage
{
    char gen;
    char sename;
    int age;
};
int main()
{
    setlocale(LC_ALL, "ru");
    int i, f = 0, m = 0;
    double age_m = 0, age_f = 0;
    Vilage N[10];
    for (i = 0; i < 10; i++) {
        cout << "Введите Пол проживающего (m-мужчина, f-женщина): " << endl;
        cin>>N[i].gen;
        cout << "Введите Фамилию проживающего: " << endl;
        cin >> N[i].sename;
        cout << "Введите Возвраст проживающего: " << endl;
        cin >> N[i].age;
    }
    for (i = 0; i < 10; i++) {
        if (N[i].gen == 'm') {
            m++;
            age_m += N[i].age;
        }
        if (N[i].gen == 'f') {
            f++;
            age_f += N[i].age;
        }
    }
    age_m /= m;
    age_f /= f;
    cout << "--------------------------------------------------------------------------------------" << endl;
    cout << "Средний возвраст мужчин составляет: " << age_m << " лет" << endl;
    cout << "Фамилии мужчин, чей возвраст выше среднего: " << endl;
    for (i = 0; i < 10; i++) {
        if (N[i].gen == 'm') {
            if (N[i].age > age_m)
                cout << N[i].sename;
        }
    }
    cout << "--------------------------------------------------------------------------------------" << endl;
    cout << "Средний возвраст женщин составляет: " << age_f << " лет" << endl;
    cout << "Фамилии женщин, чей возвраст ниже среднего: " << endl;
    for (i = 0; i < 10; i++) {
        if (N[i].gen == 'm') {
            if (N[i].age < age_m)
                cout << N[i].sename;
        }
    }
    system("pause");
    return 0;
}
Answer 1
char sename;

и

    cout << "Введите Фамилию проживающего: " << endl;
    cin >> N[i].sename;

Вы считываете 1 (прописью: один) символ в sename, а все остальное из Petrov пытаетесь считать в int age. А так как это не число - понятно, что получается одна большая ошибка - вы же "защиту от дурака" (от неверного ввода) не писали...

READ ALSO
Ошибка в определение длины строки переменной массива структуры.Подскажите пожалуйста

Ошибка в определение длины строки переменной массива структуры.Подскажите пожалуйста

подскажите пожалуйста правильно ли я ищу длину строки переменной массива структуры

102
QMake, SVN получить строку ревизии

QMake, SVN получить строку ревизии

У меня есть 2 способа получить ревизию SVN:

90
Как можно проще нарисовать радиальный градиент?

Как можно проще нарисовать радиальный градиент?

Есть ли способ проще, чем просто рисовать 240 кругов разного цвета и радиуса? И как рассчитать точное количество пикселей, нужное для каждого...

121
Удалить массив С из памяти

Удалить массив С из памяти

Полный текст задания: Даны два массива А и И одинакового размера NОпределить функцию, возвращающую новый массив С того же размера, каждый...

121