Что-то никто так и не помог. Решил создать ещё раз тему.
Всем привет.
Нужна помощь :-(
Делаю лабу, задача - нужно сделать прогу, которая бы позволяла создавать список с инфой (фамилия сотрудника, имя, отчество, должность, стаж работы, оклад), добавлять данные, удалять, выводить на экран, сохранять в файл. Проблема у меня с записью. У меня есть 2 ф-и. Одно выводит, там нет зацикливания, а вторая - сохранения инфы в списки. Я понять не могу, почему возникает рекурсия. Я указываю, что в списке, указатель на некст = 0. Не должно, но всё равно. Прошу, если разберётесь, то написать, по возможности не сильно менять код, а то не разберусь(
Спасибо.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
typedef struct list
{
char first_name[100];
char second_name[100];
char patronymic[100];
char post[100];
float length_of_work;
float salary;
struct list *next;
}list;
char c;
struct list *x=NULL;
void show(struct list *a){
char wrd[100];
float tmp;
while(a!=NULL)
{
strcpy(wrd, a->first_name);
printf(" %s\t", wrd);
strcpy(wrd, a->second_name);
printf(" %s\t", wrd);
strcpy(wrd, a->patronymic);
printf(" %s\t", wrd);
strcpy(wrd, a->post);
printf(" %s\t", wrd);
tmp=a->length_of_work;
printf(" %f\t", tmp);
tmp=a->salary;
printf(" %f\t", tmp);
a = a->next;
}
}
void add(struct list **a)
{
char str[100];
struct list *b = (struct list *)malloc(sizeof(struct list));
for (int i = 0; ; i++)
{
printf("Enter the first name:\n>>");
do
{
gets(str);
if (strlen(str)==0) printf("You've entered an empty string. Try again:\n>> ");
}while(strlen(str)==0);
if (strcmp(str, "***")==0) break;
strcpy(b->first_name, str);
printf("Enter the second name:\n>>");
do
{
gets(str);
if (strlen(str)==0) printf("You've entered an empty string. Try again:\n>> ");
}while(strlen(str)==0);
if (strcmp(str, "***")==0) break;
strcpy(b->second_name, str);
printf("Enter the patronymic:\n>>");
do
{
gets(str);
if (strlen(str)==0) printf("You've entered an empty string. Try again:\n>> ");
}while(strlen(str)==0);
if (strcmp(str, "***")==0) break;
strcpy(b->patronymic, str);
printf("Enter the post:\n>>");
do
{
gets(str);
if (strlen(str)==0) printf("You've entered an empty string. Try again:\n>> ");
}while(strlen(str)==0);
if (strcmp(str, "***")==0) break;
strcpy(b->post, str);
printf("Enter the length of work:\n>>");
do
{
gets(str);
if (strlen(str)==0) printf("You've entered an empty string. Try again:\n>> ");
}while(strlen(str)==0);
if (strcmp(str, "***")==0) break;
b->length_of_work=atof(str);
printf("Enter the salary:\n>>");
do
{
gets(str);
if (strlen(str)==0) printf("You've entered an empty string. Try again:\n>> ");
}while(strlen(str)==0);
if (strcmp(str, "***")==0) break;
b->salary=atof(str);
b->next = NULL;
if (*a == NULL)
*a = b;
else
{
struct list *t = *a;
while (t->next != NULL)
t = t->next;
t->next = b;
}
}
}
int main (void)
{
while (!(c==27))
{
system("cls");
printf("\n\n\t Laborotory work #7\n");
printf("\tPerformed by True Pazan\n");
printf("\t\t KM-31\n");
printf("\t\tVariant #1\n");
printf("\t\t\t29/03/2014\n\n\n");
printf(" Enter - run the program.\n");
printf(" Esc - exit.\n");
printf(" Any other key - information about program.\n");
c=getch();
system("cls");
switch (c)
{
case 27:
break;
case 13:
{
system("cls");
add(&x);
show(x);
printf("\n\tEsc - exit.\n");
printf("\tAny other - go to the main page.\n");
c=getch();
break;
}
default:
{
c=getch();
break;
}
}
}
x=NULL;
return 0;
}