Описать структуру "Студент" - C (СИ)
Формулировка задачи:
5. Описать, используя структуру данных сведения об учениках (фамилия, улица, дом, квартира). Составить программу, определяющую: 1) сколько учеников живет на улице Свердлова; 2)список учеников, живущих в доме номер 45 по улице Сиреневой.
подскажите почему счетчик всегда выдает 0?
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define STUDS 4
typedef struct
{
char name[15];
char street[15];
int house[4];
int flat[4];
}Student;
int main(void)
{
Student stud[STUDS];
int i,k=0,j=0,z=2;
int *p;
p=&z;
char *Sv="Свердлова", *Si="Сиреневая";
puts("Information about students");
for(i=0;i<STUDS;i++)
{
printf("---STUDENT #%d---\n",i+1);
printf("Familiya:");
scanf("%s",&stud[i].name);
printf("Street:");
scanf("%s",&stud[i].street);
printf("House:");
scanf("%d",&stud[i].house);
printf("Flat:");
scanf("%d",&stud[i].flat);
}
puts("----End of input----");
for(i=0;i<STUDS;i++)
if(strcmp(stud[i].street,Sv)==0)
k++;
for(i=0;i<STUDS;i++)
if((stud[i].house==p) && (strcmp(stud[i].street,Si)==0))
j++;
printf("Living in Sverdlova:%d",k);
printf("\nLiving in Sirenevaya, in 45 house:%d",j);
system("PAUSE");
return 0;
}Решение задачи: «Описать структуру "Студент"»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define STUDS 4
typedef struct
{
char name[15];
char street[15];
int house; /* не является массивом */
int flat; /* не является массивом */
}Student;
int main(void)
{
Student stud[STUDS];
int i,k=0,j=0,z=45; /* здесь вероятно 45 */
int *p; /* указатель */
p=&z; /* ссылка-указатель на переменную int z */
char *Sv="Sverdlova", *Si="Sirenevaya";
puts("Information about students");
for(i=0;i<STUDS;i++)
{
printf("---STUDENT #%d---\n",i+1);
printf("Familiya:");
scanf("%s",stud[i].name); /* не нужен &, так как имя массива является указателем */
printf("Street:");
scanf("%s",stud[i].street); /* не нужен &, так как имя массива является указателем */
printf("House:");
scanf("%d",&stud[i].house);
printf("Flat:");
scanf("%d",&stud[i].flat);
}
puts("----End of input----");
for(i=0;i<STUDS;i++)
if(strcmp(stud[i].street,Sv)==0)
k++;
for(i=0;i<STUDS;i++)
if((stud[i].house==*p) && (strcmp(stud[i].street,Si)==0)) //требовалось разыменование
j++;
printf("Living in Sverdlova:%d",k);
printf("\nLiving in Sirenevaya, in 45 house:%d\n",j);
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Объявляется константа STUDS, которая определяет количество студентов
- Создается структура
Студентс полями name, street, house и flat - В главной функции main создается массив из STUDS структур Student
- Инициализируются переменные i, k, j и z
- Указатель p инициализируется как ссылка на переменную z
- Переменные Sv и Si инициализируются как строки
- Выводится заголовок цикла, который позволяет ввести данные о студентах
- В цикле происходит ввод данных о каждом студенте
- После ввода данных выводится сообщение об окончании ввода
- В двух отдельных циклах подсчитывается количество студентов, проживающих на улице Sverdlova и в доме 45 на улице Sirenevaya
- Выводятся результаты подсчета
- В конце программы вызывается функция system(
PAUSE), чтобы программа не закрылась сразу после вывода результатов - Функция main возвращает 0, что означает успешное завершение программы