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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2016, 19:57   #1
Niddin_hp
Пользователь
 
Регистрация: 06.10.2015
Сообщений: 12
По умолчанию Помогите со списками.

Есть такой кодик. При запуске всё крашится. Как я понял проблема в функции чтения из файла, т.к. без неё, всё окей. В чем там ошибка?
Код:
#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#include <locale.h>

typedef struct node{
	int experience;
	struct node *next;
}NODE,*pNODE;


typedef struct list{
	struct node *top;
	int len;
}LIST,*pLIST;


pLIST CreateList();
int IsEmpty(pLIST MyList);
pNODE GetPointer(pLIST MyList);
int Add(pLIST MyList, pNODE MyNode);
void LoadFromFile(pLIST MyList, pNODE MyNode);
void Show(pLIST MyList);
int DelNode(pLIST MyList, pNODE MyNode);
void ClearList(pLIST MyList);
void DeleteList(pLIST MyList);


int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Russian");
	pLIST MyList;
	MyList=CreateList();
	LoadFromFile(MyList,GetPointer(MyList));
	Show(MyList);
	DeleteList(MyList);
	return 0;
}

pLIST CreateList()
{
	pLIST NewList;
	NewList=(pLIST)malloc(sizeof(LIST));
	if(!NewList) return NULL;
	NewList->top=NULL;
	NewList->len=0;
	return NewList;
}


int IsEmpty(pLIST MyList)
{
	if(MyList->top) return 0;
	return 1;
}

pNODE GetPointer(pLIST MyList)
{
	pNODE p = MyList->top;
	if (IsEmpty(MyList)) return NULL;
	while (p->next){
		p = p->next;
	}
	return p;
}


int Add(pLIST MyList, pNODE MyNode)
{
	pNODE pnew, p = MyList->top;
	pnew = (pNODE)malloc(sizeof(NODE));
	if (!pnew) return 0;
	MyList->len++;
	scanf_s("%d",&pnew->experience);
	if (IsEmpty(MyList))
	{
		pnew->next = p;
		MyList->top = pnew;
		return 1;
	}
	pnew->next = MyNode->next;
	MyNode->next = pnew;
	return 1;
}


void Show(pLIST MyList)
{
	pNODE p=MyList->top;
	while (p){
		printf_s("\n%d",p->experience);
		p=p->next;
	}
}

void LoadFromFile(pLIST MyList,pNODE MyNode){
	pNODE pnew,p=MyList->top;
	FILE *in;
	int n=5;
	pnew=(pNODE)malloc(sizeof(NODE));
	if (pnew){
		fopen_s(&in,"d:\\input.txt","r");
		while (n) 
		{
			n--;
			MyList->len++;
			fscanf_s(in,"%d",&pnew->experience);
			if (IsEmpty(MyList))
			{
				pnew->next = p;
				MyList->top = pnew;
			}
			pnew->next = MyNode->next;
			MyNode->next = pnew;
		}
		fclose(in);
	}
}

int DelNode(pLIST MyList, pNODE MyNode)
{	
	if(MyNode==NULL) return 0;
	else
	{
		pNODE p=MyNode->next;
		MyNode->next=MyNode->next->next;
		free(p);
	}
	MyList->len--;
	return 1;
}


void ClearList(pLIST MyList)
{
	pNODE p=MyList->top;
	while(p->next!=NULL)
	{
		DelNode(MyList,p);
		MyList->len--;
	}
	MyList->top=NULL;
}

void DeleteList(pLIST MyList)
{
	ClearList(MyList);
	free(MyList);
}
Niddin_hp вне форума Ответить с цитированием
Старый 03.07.2016, 21:13   #2
ur_naz
Заблокирован
 
Регистрация: 17.06.2016
Сообщений: 62
По умолчанию

Во-первых, начни с правильной постановки задачи!!! Например,
Код:
pLIST LoadFromFile( const char *fname ) ;
Во вторых память нужно сначала выделять, потом использовать
ur_naz вне форума Ответить с цитированием
Старый 04.07.2016, 01:51   #3
Niddin_hp
Пользователь
 
Регистрация: 06.10.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от ur_naz Посмотреть сообщение
Во-первых, начни с правильной постановки задачи!!! Например,
Код:
pLIST LoadFromFile( const char *fname ) ;
Во вторых память нужно сначала выделять, потом использовать
Спасибо, проблема решилась) Только появилась другая) Как слово считать из файла в переменную? Делаю это таким образом
Код:
char name[20];
...
fscanf_s(in,"%s %d %c",&name,20,&date,&sex);
После чего печатаю printf , но выходит абракадабра, ННННННННННННН...и смайлик улыбающийся в конце-_-се слова меньше заданного размера.
Niddin_hp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема со списками absbelii Microsoft Office Excel 1 15.01.2011 10:42
Помогите со списками в Delphi arm777 Помощь студентам 2 09.06.2009 13:54
помогите с работой с односвязными списками Паскаль neon0858 Помощь студентам 2 18.05.2009 22:00
Помогите пожалуйста со списками... Horknee Паскаль, Turbo Pascal, PascalABC.NET 10 22.12.2008 16:21