Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура Си, срочно нужна помощь 
V
    Опции темы
NimbJles
Дата 12.5.2015, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.5.2015

Репутация: нет
Всего: нет



Описать структуру с именем 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;

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

Это сообщение отредактировал(а) NimbJles - 12.5.2015, 21:45
PM MAIL   Вверх
rudolfninja
Дата 13.5.2015, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 3
Всего: 6



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

float progress[5];

сделать целочисленного типа
PM MAIL Skype   Вверх
NimbJles
Дата 16.5.2015, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.5.2015

Репутация: нет
Всего: нет



Нашёл ошибку, теперь всё работает
Код

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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.