Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2012, 20:21   #1
Vlt
Пользователь
 
Регистрация: 18.05.2012
Сообщений: 27
По умолчанию Си как организовать структуру, данные взять из файла или сгенерировать

Подскажите как организовать структуру, данные взять из файла или сгенерировать.
Изучаю Си по книге Подбельский и Фомин, пока трудно понять…
Читал Ричи, там еще хуже описано.

Задача
В институте три группы, в списке есть: фамилия, курс, специалитет или бакалавриат. Организовать структуру данных, сгенерировать информацию. Определить, кто учится на специалитете, а кто на бакалавриате, сколько студентов перейдут на 2 курс, сколько необходимо создать групп и по сколько человек.
Я начал вот так…
Код:

#include <math.h>
#include <stdio.h>

main()
{
struct inst
  {
  char grup[3];
  char Familiy[80]; 
  char kurs[80]; 
  char special[80];
  char bakalavr[80];
	
  };
  
system("pause");  
}

Последний раз редактировалось Stilet; 04.06.2012 в 20:24.
Vlt вне форума Ответить с цитированием
Старый 04.06.2012, 20:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну нормально начал (почти).
Теперь сделай ввод массива типа inst и вывод - для начала оч даже не плохо будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2012, 20:51   #3
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
специалитет или бакалавриат
Тут флаг должен быть. Вот только название адекватное не смог придумать. А курс и группу лучше целыми числами написать, а не массивами символов.

Код:
#include <stdio.h>

#define MAX_NUM_OF_STUDENTS 500
#define BSIZE 80

typedef struct {
   int group; 
   char family[BSIZE];
   int course;
} student;

int main()
{
    student students[MAX_NUM_OF_STUDENTS];
    
    return 0;
}
8Observer8 вне форума Ответить с цитированием
Старый 04.06.2012, 21:42   #4
Vlt
Пользователь
 
Регистрация: 18.05.2012
Сообщений: 27
По умолчанию

Вас не понял, что такое "inst"
У меня пока только вот так получается,как ввести данные???
Код:
struct inst
{
  char grup[3];
  char Familiy[80]; 
  char kurs[80]; 
  char special[80];
  char bakalavr[80];
};
  
void main()
{

puts ("grup\t Familiy\t kurs\t special\t bakalavr\n");
puts ("1\t Ivanov\t\t 1\t\t +\t\t +\n");

system("pause");  
}

Последний раз редактировалось Stilet; 06.06.2012 в 08:04.
Vlt вне форума Ответить с цитированием
Старый 05.06.2012, 10:01   #5
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Из файла конечно, но в первом примере без файла попробуем:
Код:
#include <stdio.h>

#define MAX_NUM_OF_STUDENTS 500
#define BSIZE 80

typedef struct {
   char family[BSIZE];
   int group; 
   int course;
} student;

int main()
{
    int n, i;
    student students[MAX_NUM_OF_STUDENTS];

    printf("Enter number of students: ");
    scanf("%d", &n);
    
    // entering of data
    for (i = 0; i < n; i++) {
        printf("\nstudent %03d:\n", i+1);

        printf("Enter a family: ");
        scanf("%s", &students[i].family);

        printf("Enter a group: ");
        scanf("%d", &students[i].group);

        printf("Enter a course: ");
        scanf("%d", &students[i].course);
    }

    // printing of data
    for (i = 0; i < n; i++) {
        printf("\nstudent %03d:\n", i+1);
        printf("Family: %s\n", students[i].family);
        printf("Group: %d\n", students[i].group);
        printf("Course: %d\n", students[i].course);
    }

    return 0;
}
Второй пример (данные хранятся в файле infile.txt):

infile.txt
Цитата:
Ivanov
351
3

Petrov
354
3

Sidorov
452
4
main.c
Код:
#include <stdio.h>

#define MAX_NUM_OF_STUDENTS 500
#define BSIZE 80

typedef struct {
   char family[BSIZE];
   int group; 
   int course;
} student;

int main()
{
    int i, n = 0;
    student stud[MAX_NUM_OF_STUDENTS];

    char* filename = "infile.txt";
    FILE *fp = fopen(filename, "r");

    if (fp == NULL) {
        fprintf(stderr, "Error: cannot open file \"%s\"\n", filename);
        return 1;
    }

    // entering of data
    while (fscanf(fp, "%s%d%d", &stud[n].family, &stud[n].group,  &stud[n].course) != EOF) {
        n++;
    }

    // printing of data
    for (i = 0; i < n; i++) {
        printf("\nstudent %03d:\n", i+1);
        printf("Family: %s\n", stud[i].family);
        printf("Group: %d\n", stud[i].group);
        printf("Course: %d\n", stud[i].course);
    }

    fclose(fp);
    return 0;
}

Последний раз редактировалось 8Observer8; 05.06.2012 в 11:59.
8Observer8 вне форума Ответить с цитированием
Старый 05.06.2012, 18:36   #6
Vlt
Пользователь
 
Регистрация: 18.05.2012
Сообщений: 27
По умолчанию

Спасибо.
В принципе разобрался:
создали структура, в ней объявили массив,
Затем запустили цикл от i до n(кол-во студентов)
запись
scanf("%s", &students[i].family);%S — символьная строка
студент № от1 до n фамилия,группа,курс
Цикл завершили при i>n
Затем запускаем еще один цикл
он выводит результат в столбик. Если неправильно прошу поправить меня.

Только непонятно, что это
Код:
#define MAX_NUM_OF_STUDENTS 500 //???
#define BSIZE 80  //???
 student students[MAX_NUM_OF_STUDENTS]; //???
 char* filename = "infile.txt";
 FILE *fp = fopen(filename, "r");

  if (fp == NULL) {
  fprintf(stderr, "Error: cannot open file \"%s\"\n", filename);
   return 1;
   }
   // entering of data
   while (fscanf(fp, "%s%d%d", &stud[n].family, &stud[n].group,  &stud[n].course) != EOF) 
    {
   n++;
    }
fclose(fp); //???
From Stilet: Почему, муть твою, код не выделяем по правилам???!!! Еще раз такое увижу - тема полетит в топку!

Последний раз редактировалось Stilet; 06.06.2012 в 08:03.
Vlt вне форума Ответить с цитированием
Старый 05.06.2012, 23:02   #7
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от Vlt Посмотреть сообщение
#define MAX_NUM_OF_STUDENTS 500 //???
MAX_NUM_OF_STUDENTS - это константа равная 500. На самом деле перед компилированием текст "MAX_NUM_OF_STUDENTS" будет заменён на текст "500"

Цитата:
Сообщение от Vlt Посмотреть сообщение
#define BSIZE 80 //???
Тоже самое, что и выше.

Цитата:
Сообщение от Vlt Посмотреть сообщение
student students[MAX_NUM_OF_STUDENTS]; //???
Массив структур типа student

Цитата:
Сообщение от Vlt Посмотреть сообщение
char* filename = "infile.txt";
filename - это указатель на строку "infile.txt" (константный символьный массив)

Цитата:
Сообщение от Vlt Посмотреть сообщение
FILE *fp = fopen(filename, "r");
объявляем указатель на структуру fp типа FILE и инициализируем с помощью вызова функции fopen, которая возвращает структуру этого типа. Это открытие файла с именем filename в режиме "только для чтения"

Цитата:
Сообщение от Vlt Посмотреть сообщение
if (fp == NULL) {
fprintf(stderr, "Error: cannot open file \"%s\"\n", filename);
return 1;
}
Проверяем удачно ли открытие. Функция fopen вернёт NULL (это указатель "ни на что" или нулевой указатель) если файл не удаётся открыть (к примеру, его нет)

Цитата:
Сообщение от Vlt Посмотреть сообщение
// entering of data
while (fscanf(fp, "%s%d%d", &stud[n].family, &stud[n].group, &stud[n].course) != EOF)
{
n++;
}
Здесь мы инициализируем члены массива структур типа student. И за одно, считаем количество инициализированных структур. Считываем пока не конец файла (EOF - End Of File)

Цитата:
Сообщение от Vlt Посмотреть сообщение
fclose(fp); //???
[/QUOTE]
Закрываем файл (освобождаем файловый указатель).
8Observer8 вне форума Ответить с цитированием
Старый 06.06.2012, 22:55   #8
Vlt
Пользователь
 
Регистрация: 18.05.2012
Сообщений: 27
По умолчанию

Спасибо Вам огромное.
Vlt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взять данные из созданного файла .h. Madmaxisss Visual C++ 2 12.07.2011 21:46
Как подключть BDE к Delphi 2010? Или где взять? 3D Hunter БД в Delphi 7 29.06.2010 11:31
может ли макрос взять данные из файла не открывая сам файл? kievlyanin Microsoft Office Excel 1 14.10.2009 19:51
Как лучше организовать структуру MySQL? Romanbl4 PHP 7 26.06.2008 23:46