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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2013, 14:32   #1
КРИЖ
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 44
По умолчанию Список С++ не выводит список

Написал программу на список, её задача взять базу из файла и добавить в конец элемпент и вывести потом в файл. Проблема в том, что после вывода файл остаётся пустым
Код:
#include "stdafx.h"
#include "fstream"
#include "iostream"
#include "cstring"
#include "cstdlib"

using namespace std;
const int l_name=31;
struct Man
{
	char name[l_name];
	int age;
	Man *next;
};
Man *beg;
Man* add(Man *beg,const Man &man);
void get_name(char *name);
Man read_man();
int write_base(char *filename,Man *beg);
Man* read_base(char *filename);

Man* add(Man *beg,const Man &man)//Добавление 
{
	Man* pv=new Man;//формирование нового элемента
	*pv=man;
	pv->next=0;
	if(beg)//список не пуст
	{
		Man* temp=beg;
		while(temp->next)
		{
			temp=temp->next;//поиск конца спискаж
		}
		temp->next;//привязывание нового элемента
	}
	else beg=pv;
	return beg;//список пуст
}
Man read_man()//ввод информации
	{
		Man man; char buf[80];
		get_name(man.name);
		for(int i=strlen(man.name);i<l_name;i++)
		{
			man.name[i]=' ';
		}
		man.name[l_name-1]='\0';
		do
		{
			puts("Enter the person's age");
			gets(buf);
		}
		while(!(man.age=(int) atof(buf)));
		return man;
	}
void get_name(char *name)//запрос имени
{
	puts("Enter name");
	gets(name);
}
int write_base(char *filename, Man *pv)//вывод базы в фаил
{
	FILE*fout;
	if((fout=fopen(filename,"w"))==NULL)
	{
		puts("error opening file");
		return 1;
	}
	while(pv)
	{
		fprintf(fout,"%s%5i\n",pv->name,pv->age);
			pv=pv->next;
	}
	fclose(fout);
	return 0;
}
Man* read_base(char *filename)//чтение базы из файла
{
	FILE*fin;
	Man man,*beg=0;
	if((fin=fopen(filename,"r"))==NULL)
	{
		printf("the file does not exist %s\n",filename);
	}
	while(!feof(fin))
	{
		fgets(man.name,l_name,fin);
		fscanf(fin,"%i\n", &man.age);
		beg=add(beg,man);
	}
	fclose(fin);
	return beg;
}

int main()
{
	Man *bag=read_base("C:\\Users\\Admin\\Desktop\\text.txt");
	add(beg,read_man());
	write_base("C:\\Users\\Admin\\Desktop\\text.txt",beg);
}
P.S.
пробовал выводить в C:\\Users\\Admin\\Desktop\\text2.tx t тоже самое пустой файл. Так же пробовал выводить на экран - пусто

Последний раз редактировалось КРИЖ; 25.03.2013 в 14:55.
КРИЖ вне форума Ответить с цитированием
Старый 25.03.2013, 15:05   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Вот что Вы получаете за использование глобальных переменных.
Текст main внимательно перечитайте.
Abstraction вне форума Ответить с цитированием
Старый 25.03.2013, 15:38   #3
КРИЖ
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 44
По умолчанию

Все увидел спасибо
КРИЖ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование, перемещение листа, выподающий список список albih Microsoft Office Excel 1 31.05.2012 12:49
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Список с заглавным звеном, из текстового файла получить список из записей и по нему уже сделать задание Zigfried Помощь студентам 2 04.10.2010 20:29
связать список строк и список целых чисел lirikoff Помощь студентам 5 31.08.2010 13:23
Данные-проверка-список (список на другом листе) Inbox Microsoft Office Excel 7 26.12.2008 01:43