Привет, извините, что снова поднял этот вопрос, я вижу, что здесь много подобных проблем, но я все еще не могу понять, что я делаю неправильно. У меня есть задача написать простую базу данных для студентов, с динамическим распределением памяти и структурами. Моя проблема в том, что я не понимаю, как создать динамически размещенный массив, записать в него информацию и как передать его дальше, чтобы прочитать и отобразить на экране в другой функции. Я попытался написать какой-то код, и он даже работал, но однажды прошел, я пытаюсь запустить его, и проблема появляется, компилятор не показывает каких-либо существенных проблем с ним, но он просто останавливается после ввода первого значения (ID студента). Пожалуйста, помогите мне решить, что я делаю неправильно, я понятия не имею, что я должен делать.
Вот мой код:
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
struct student{
char ID[7];
char name[20];
char surename[20];
char addres[20];
char phone_num[9];
};
//inputs with arrays overflow protection
student new_student(int k)
{
student *st,*stt;
if(k>0)
{
realloc(st,k*sizeof(student));
}
else
{
st=(student*)malloc(sizeof(student));
if (st==NULL)
{
printf("\nERROR\nnot enough memory");
exit(1);
}
}
system("cls");
//ID
while (1)
{
fflush(stdin);
printf("\nenter 7 digit student ID: ");
gets(st->ID);
//check the entered ID
if (st->ID[7]!='\0')
{
printf("\nentered ID is to long\n");
getch();
system("cls");
st->ID[7]='\0';
}
else if(st->ID[6]=='\0')
{
printf("\nentered ID is to short\n");
getch();
system("cls");
st->ID[6]='\0';
}
else
{
break;
}
}
//NAME
while (1)
{
fflush(stdin);
printf("\nenter student's name: ");
gets(st->name);
if (st->name[20]!='\0')
{
printf("\nentered name is to long\n");
getch();
system("cls");
st->name[20]='\0';
printf("\nenter 7 digit student ID: ");
for (int i=0;i<7;i++)
printf("%c",st->ID[i]);
printf("\n");
}
else
{
break;
}
}
//SURENAME
while (1)
{
fflush(stdin);
printf("\nenter student's surename: ");
gets(st->surename);
if (st->surename[20]!='\0')
{
printf("\nentered surename is to long\n");
getch();
system("cls");
st->surename[20]='\0';
printf("\nenter 7 digit student ID: ");
for (int i=0;i<7;i++)
printf("%c",st->ID[i]);
printf("\n");
printf("\nenter student's name: ");
for (int i=0;i<20;i++)
printf("%c",st->name[i]);
printf("\n");
}
else
{
break;
}
}
//ADDRES
while (1)
{
fflush(stdin);
printf("\nenter student's addres: ");
gets(st->addres);
if (st->addres[20]!='\0')
{
printf("\nentered addres is to long\n");
getch();
system("cls");
st->addres[20]='\0';
printf("\nenter 7 digit student ID: ");
for (int i=0;i<7;i++)
printf("%c",st->ID[i]);
printf("\n");
printf("\nenter student's name: ");
for (int i=0;i<20;i++)
printf("%c",st->name[i]);
printf("\n");
printf("\nenter student's surename: ");
for (int i=0;i<20;i++)
printf("%c",st->surename[i]);
printf("\n");
}
else
{
break;
}
}
//PHONE
while (1)
{
fflush(stdin);
printf("\nenter student's phone number: ");
gets(st->phone_num);
if (st->phone_num[9]!='\0')
{
printf("\nentered phone number is to long\n");
getch();
system("cls");
st->phone_num[9]='\0';
printf("\nenter 7 digit student ID: ");
for (int i=0;i<7;i++)
printf("%c",st->ID[i]);
printf("\n");
printf("\nenter student's name: ");
for (int i=0;i<20;i++)
printf("%c",st->name[i]);
printf("\n");
printf("\nenter student's surename: ");
for (int i=0;i<20;i++)
printf("%c",st->surename[i]);
printf("\n");
printf("\nenter student's addres: ");
for (int i=0;i<20;i++)
printf("%c",st->addres[i]);
printf("\n");
}
else if(st->phone_num[8]=='\0')
{
printf("\nentered phone number is to short\n");
getch();
system("cls");
st->phone_num[8]='\0';
printf("\nenter 7 digit student ID: ");
for (int i=0;i<7;i++)
printf("%c",st->ID[i]);
printf("\n");
printf("\nenter student's name: ");
for (int i=0;i<20;i++)
printf("%c",st->name[i]);
printf("\n");
printf("\nenter student's surename: ");
for (int i=0;i<20;i++)
printf("%c",st->surename[i]);
printf("\n");
printf("\nenter student's addres: ");
for (int i=0;i<20;i++)
printf("%c",st->addres[i]);
printf("\n");
}
else
{
break;
}
}
return *st;
}
void search_student ()
{
;
}
int main(int argc, char** argv)
{
while (1)
{
system("cls");
int choice,st_counter=0;
printf("===MENU===\n");
printf("1. Add Student\n");
printf("2. Search Student\n");
printf("3. Modify Student Record\n");
printf("4. Generate Marksheet\n");
printf("5. Delete Student Record\n");
printf("6. Exit\n");
printf("Enter your choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1:
st_counter++;//increase array size every time entering new student's data
new_student(st_counter);
break;
case 2:
void search_student ();
break;
case 3:
break;
case 4:
//this will print to file later
break;
case 5:
break;
case 6:
return 0;
break;
default:
break;
}
}
return 1;
}