Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Структура Си


Автор: NimbJles 12.5.2015, 21:42
Описать структуру с именем STUDENT, содержащую следующие поля:
-    фамилия и инициалы;
-    номер группы;
-    □    успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
-    ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT; 
-    записи должны быть упорядочены по алфавиту;
-     вывод на дисплей фамилий и номеров групп для всех студентов, имеющих хотя бы одну оценку 2;
-    если таких студентов нет, вывести соответствующее сообщение.
Вот мой код:
Код

#include "stdafx.h"
#include "conio.h"
#include "locale.h"
#include "stdlib.h"
#include "string.h"

struct student
{
    char name[10];
    char group[10];
    float progress[5];
};
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    const int n = 2;
    int b, i;
    struct student a[n];
    struct student g;
    for (i = 0; i < n; i++)
    {
        printf("Введите фамилию студента: ");
        scanf_s("%s", a[i].name, 10);
        printf("Введите группу студента: ");
        scanf_s("%s", a[i].group, 10);
        printf("Введите 5 оценок: ");
        for (int j = 0; j < 5; j++)
        scanf_s("%d", a[i].progress);
    }
    i = 0;
    while (i < (n - 1))
    {
        b = 0;
        while (b < n)
        if (a[i].name[b]>a[i + 1].name[b])
        {
            g = a[i];
            a[i] = a[i + 1];
            a[i + 1] = g;
            b = 10;
            i = 0;
        }
        else {
            if (a[i].name[b] == a[i + 1].name[b])
            {
                b++;
            }
            else{ i++;
            b = 10;
            }
        }
    }
    printf("\nСписок студентов: \n");
    for (i = 0; i < n; i++)
        printf("\nСтудент: %s группа: %s", &a[i].name, &a[i].group);
    printf("\nСписок двоечников ");
    int c = 0;
    for (i = 0; i < n; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if (a[i].progress[j] == 2)
            {
                printf("\nСтудент: %s группа: %s", &a[i].name, &a[i].group);
                c++;
                break;
            }
        }
    }
    if (c == 0)
        printf("\nТаких студентом нет.");
    _getch();
    return 0;

Сортировка работает, а вот студентов с двойками почему то не выводит. Всегда высвечивается, что таких студентов нет. Помогите найти ошибку.

Автор: rudolfninja 13.5.2015, 09:23
С виду все правильно. Точно не уверен, но думаю, что проблема в сравнении целого числа с вещественным.
Попробуйте массив 
Код

float progress[5];

сделать целочисленного типа

Автор: NimbJles 16.5.2015, 14:39
Нашёл ошибку, теперь всё работает
Код

 scanf_s("%d", a[i].progress[5]);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)