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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2014, 12:42   #1
guroDragon
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 83
По умолчанию Связные списки в СИ

Что-то никто так и не помог. Решил создать ещё раз тему.

Всем привет.
Нужна помощь :-(
Делаю лабу, задача - нужно сделать прогу, которая бы позволяла создавать список с инфой (фамилия сотрудника, имя, отчество, должность, стаж работы, оклад), добавлять данные, удалять, выводить на экран, сохранять в файл. Проблема у меня с записью. У меня есть 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;
}
guroDragon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си связные списки. guroDragon Помощь студентам 0 09.05.2014 23:13
Связные списки Dady 1992 Общие вопросы C/C++ 6 23.06.2012 19:34
Связные списки С++ Gedbro Общие вопросы C/C++ 1 06.06.2012 10:59
Связные списки MasterSporta Общие вопросы C/C++ 2 19.05.2011 02:30
Связные списки Маринка777 Общие вопросы .NET 3 08.06.2010 23:41