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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 23:38   #31
Alik-Soldier
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 38
По умолчанию

Спасибо)))Вы мне очень помогли)))
Alik-Soldier вне форума Ответить с цитированием
Старый 28.05.2009, 13:53   #32
Alik-Soldier
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 38
По умолчанию

я когда использую функцию вот такую для чтения файла:
Код:
void Telephon::LoadFile()
{
	FILE *f = fopen("telephon.txt", "r");
	if((f=fopen("telephon.txt","r"))==NULL)
        printf("Cannot open file\n");
	char buff[150];
	int i=0;
	while(!feof(f))
	{	
		fgets (buff, sizeof(buff), f);
		strtok (buff," ");
		strcpy (mas[i].fio.surname, buff);
		strtok (NULL, " ");
		strcpy (mas[i].fio.name, buff);
		strtok (NULL, "\n");
		strcpy(mas[i].fio.second_name, buff);
		fgets (buff, 100, f);
		strtok (buff, "\n");
		strcpy (mas[i].adress, buff);
		fgets(buff, sizeof(buff),f);
		mas[i].year = atoi(buff);
		fgets(buff,sizeof(buff),f);
		mas[i].number = atoi(buff);
		fgets(buff,sizeof(buff),f);
		i++;
	}
	fclose(f);
	f = fopen("telephon.txt", "w");
	for(int j=0;j<i;j++)
	{
		fprintf(f,"%s %s %s\n",mas[j].fio.surname,mas[j].fio.name,mas[j].fio.second_name);
		fprintf(f,"%s\n",mas[j].adress);
		fprintf(f,"%d\n",mas[j].year);
		fprintf(f,"%d\n",mas[j].number);
		fprintf(f,"\n");
	}
}
она работает,но при выводе обратно в файл в первой строке печатает "Фамилия Фамилия Фамилия",вместо того чтобы печатать "Фамилия Имя Отчество"...Отчего такое может быть???
И есть код для функции добавления в файл:
Код:
void Telephon::Dobavit()		
{
	int i=0;
	f = fopen("telephon.txt", "a");
	while(i<1)
	{
	cout<<"Enter telephone subscriber surname, name and second name"<<endl;				//ФИО абонента
	cin.getline(mas[i].fio.surname,sizeof(mas[i].fio.surname),32);				
    cin.getline(mas[i].fio.name,sizeof(mas[i].fio.name),32);
    cin.getline(mas[i].fio.second_name,sizeof(mas[i].fio.second_name));
	cout<<"Enter telephone subscriber adress:"<<endl;		//Адрес абонента
    cin.getline(mas[i].adress,sizeof(mas[i].adress));
	cout<<"Enter year of telephon installation"<<endl;	  //Год установки телефона
    cin>>mas[i].year;
	cout<<"Enter telephone number:"<<endl;												//Номер телефона
    cin>>mas[i].number;
    fprintf(f,"%s %s %s\n",mas[i].fio.surname,mas[i].fio.name,mas[i].fio.second_name);  //...
    fprintf(f,"%s\n",mas[i].adress);													//...
    fprintf(f,"%d\n",mas[i].year);														//...
    fprintf(f,"%d\n",mas[i].number);													//запись в файл экзмепляра структуры
	fprintf(f,"\n");
	i++;
	}
	fclose(f);
}
Но он по непонятной мне причине в файл не записывает, лишь в файле какие-то нули появляются...

Последний раз редактировалось Sazary; 28.05.2009 в 13:56.
Alik-Soldier вне форума Ответить с цитированием
Старый 28.05.2009, 14:27   #33
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Да, там ошибка. Вот так надо:
Код:
int Telephon::LoadFile()
{
	FILE *f = fopen("telephon.txt", "r");
	if((f=fopen("telephon.txt","r"))==NULL)
        printf("Cannot open file\n");
	char buff[150],*p;
	int i=0;
	while(!feof(f))
	{
		fgets (buff, sizeof(buff), f);
		p = strtok (buff," ");
		strcpy (mas[i].fio.surname, p);
		p = strtok (NULL, " ");
		strcpy (mas[i].fio.name, p);
		p = strtok (NULL, "\n\0");
		strcpy(mas[i].fio.second_name, p);
		fgets (buff, 100, f);
		p = strtok (buff, "\n");
		strcpy (mas[i].adress, p);
		fgets(buff, sizeof(buff),f);
		mas[i].year = atoi(buff);
		fgets(buff,sizeof(buff),f);
		mas[i].number = atoi(buff);
		fgets(buff,sizeof(buff),f);
		i++;
	}
	fclose(f);
	f = fopen("telephon.txt", "w");
	for(int j=0;j<i;j++)
	{
		fprintf(f,"%s %s %s\n",mas[j].fio.surname,mas[j].fio.name,mas[j].fio.second_name);
		fprintf(f,"%s\n",mas[j].adress);
		fprintf(f,"%d\n",mas[j].year);
		fprintf(f,"%d\n",mas[j].number);
		if(j<i-1) fprintf(f,"\n");
	}
}
И вот вторая функция:
Код:
void Telephon::Dobavit()		
{
	TelAbon tmp;
	f = fopen("telephon.txt", "a");
	cout<<"Enter telephone subscriber surname, name and second name"<<endl;
	cin.getline(tmp.fio.surname,sizeof(tmp.fio.surname),32);				
    cin.getline(tmp.fio.name,sizeof(tmp.fio.name),32);
    cin.getline(tmp.fio.second_name,sizeof(tmp.fio.second_name));
	cout<<"Enter telephone subscriber adress:"<<endl;
    cin.getline(tmp.adress,sizeof(tmp.adress));
	cout<<"Enter year of telephon installation"<<endl;	  
    cin>>tmp.year;
	cout<<"Enter telephone number:"<<endl;	
    cin>>tmp.number;
    fprintf(f,"\n");
    fprintf(f,"%s %s %s\n",tmp.fio.surname,tmp.fio.name,tmp.fio.second_name);
    fprintf(f,"%s\n",tmp.adress);					
    fprintf(f,"%d\n",tmp.year);	
    fprintf(f,"%d\n",tmp.number);

	fclose(f);
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.05.2009, 19:06   #34
Alik-Soldier
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 38
По умолчанию

Спасибо огромное!!!
Alik-Soldier вне форума Ответить с цитированием
Старый 29.05.2009, 11:41   #35
Alik-Soldier
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 38
По умолчанию

Вот я дописал еще 3 функции и получил вот такой код...
Код:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <string.h>
#include <fstream>
using namespace std;
void Choice();
int c=0;							//Глобальная переменная с - для количества элементов структуры  
int k=0;							//Глобальная переменная к - для номера удаляемого элемента
    struct TelAbon					//Структура для абонента
    {
		struct FIO
		{
        char surname[50];			//Фамилия 
        char name[50];				//Имя
        char second_name[50];		//Отчество
		};	
	FIO fio;
	char adress[100];				//Адрес абонента
    int year;						//Год установки телефона
    int number;						//Номер телефона
    };
class Telephon						//Создаю свой класс
{
public:
    Telephon();						//Конструктор	
	void LoadFile();				//Функция для считывания информации из файла
    void Dobavit();					//Функция для добавления экземпляра структуры
    void Ydalit();					//Функция для удаления экземпляра структуры
    void Naity();					//Функция для поиска по адресу/фамилии	
    void Analiz();					//Функция печатает количество телефонов,установленных в определенном году
	void SaveFile();
	TelAbon mas[5000];
};
Telephon tel;						//Экземпляр класса
Telephon::Telephon()				//Инициализация конструктора
{
}
void Telephon::LoadFile()
{
	FILE *f = fopen("telephon.txt", "r");
	if((f=fopen("telephon.txt","r"))==NULL)
        printf("Cannot open file\n");
	char buff[150],*p;
	int i=0;
	while(!feof(f))
	{
		fgets (buff, sizeof(buff), f);
		p = strtok (buff," ");
		strcpy (mas[i].fio.surname, p);
		p = strtok (NULL, " ");
		strcpy (mas[i].fio.name, p);
		p = strtok (NULL, "\n\0");
		strcpy(mas[i].fio.second_name, p);
		fgets (buff, 100, f);
		p = strtok (buff, "\n");
		strcpy (mas[i].adress, p);
		fgets(buff, sizeof(buff),f);
		mas[i].year = atoi(buff);
		fgets(buff,sizeof(buff),f);
		mas[i].number = atoi(buff);
		fgets(buff,sizeof(buff),f);
		i++;
	}
	c=i;
	fclose(f);
	remove("telephon.txt");
}

void Telephon::Dobavit()		
{
	FILE *f;
	TelAbon tmp;
	f = fopen ("telephon.txt", "w");
	cout<<"Enter telephon subscriber surname, name and second name"<<endl;
	cin.getline(tmp.fio.surname,sizeof(tmp.fio.surname),32);				
    cin.getline(tmp.fio.name,sizeof(tmp.fio.name),32);
    cin.getline(tmp.fio.second_name,sizeof(tmp.fio.second_name));
	cout<<"Enter telephon subscriber adress:"<<endl;
    cin.getline(tmp.adress,sizeof(tmp.adress));
	cout<<"Enter year of telephon installation"<<endl;	  
    cin>>tmp.year;
	cout<<"Enter telephon number:"<<endl;	
    cin>>tmp.number;
    fprintf(f,"%s %s %s\n",tmp.fio.surname,tmp.fio.name,tmp.fio.second_name);
    fprintf(f,"%s\n",tmp.adress);					
    fprintf(f,"%d\n",tmp.year);	
    fprintf(f,"%d\n",tmp.number);
	fprintf(f,"\n");
	fclose(f);
}
void Telephon::Ydalit()
{
	char sname[50], nm[50], snm[50];
	cout<<"Enter telephon subscriber surname, name and second name, who you want to remove"<<endl;
	cin.getline(sname, sizeof(sname), 32);
	cin.getline(nm, sizeof(nm), 32);
	cin.getline(snm, sizeof(snm));
	for(int i=0; i<c; i++)
	{
		char s = strcmp (sname, mas[i].fio.surname);
		char n = strcmp	(nm, mas[i].fio.name);
		char sn = strcmp (snm, mas[i].fio.second_name);
		if (s==0 && n==0 && sn==0)
			k=i;
	}
}
void Telephon::Naity()
{
	char surname[50];
	char adress[50];
	cout<<"Enter telephon subscriber surname"<<endl;
	cin.getline(surname,sizeof(surname),32);
	cout<<"Enter telephon subscriber adress"<<endl;
	cin.getline(adress,sizeof(adress));
	if(sizeof(adress)==0)
		for(int i=0; i<c; i++)
		{
			char s = strcmp(surname, mas[i].fio.surname);
				if(s==0)
				{
					printf("%s %s %s\n", mas[i].fio.surname, mas[i].fio.name, mas[i].fio.second_name);
					printf("%d\n", mas[i].number);
				}
				else
					cout<<" Telephon subscriber isn't find"<<endl;
		}
	else
		for(int i=0; i<c; i++)
		{
			char a = strcmp(adress, mas[i].adress);
			char b = strcmp(surname, mas[i].fio.surname);
			if(a==0 && b==0)
			{	
				printf("%s %s %s\n", mas[i].fio.surname, mas[i].fio.name, mas[i].fio.second_name);
				printf("%s\n", mas[i].adress);
				printf("%d\n", mas[i].number);
			}
			else
			if(a!=0 && b==0) 
			{
				printf("%s %s %s\n", mas[i].fio.surname, mas[i].fio.name, mas[i].fio.second_name);
				printf("%d\n", mas[i].number);
			}
			else
				cout<<" Telephon subscriber isn't find"<<endl;
		}
}
void Telephon::Analiz()
{ 
	int year,count=0;
	cout<<"Enter year of telephon installation"<<endl;		//Вводится год установки телефона
	cin>>year;
	for(int i=0;i<c;i++)			//Выполняется, пока не достигнет конца файла
	{	
		if(year==mas[i].year)			//Если найден искомый год - инкремент переменной с
			count++;
	}
	cout<<count<<" Telephon installed in "<<year<<" year"<<endl;	//Вывод на экран количество телефонов, установленных в нужном году	
}

Последний раз редактировалось Sazary; 29.05.2009 в 12:00.
Alik-Soldier вне форума Ответить с цитированием
Старый 29.05.2009, 11:44   #36
Alik-Soldier
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 38
По умолчанию

И вот продолжение(в одно сообщение не влезло...):
Код:
int main()
{
	tel.LoadFile();
	Choice(); 
	tel.SaveFile();
    return 0;
}
void Choice()
{
	int control;							//Переменная для реакции на клавиатуру
	cout<<"Choose menu position"<<endl;		//Выбрать позицию из меню
    cout<<"\nMENU:\n1.Add telephone subscriber \n2.Find telephone subscriber \n3.Remove telephone subscriber \n4. Analysis \n5. Exit\n"<<endl;
    cin>>control;
    for(;;)
    {
        if(control==1)
            tel.Dobavit();
		else
		if(control==2)
			tel.Naity();
		else
		if(control==3)
			tel.Ydalit();
		if(control==4)
			tel.Analiz();
        if (control==5)break;
		else
		if(control==0 || control<9 && control>5)
			cout<<"You press incorrect button. Please repeat"<<endl;	//Нажата неверная клавиша, повторить
		cout<<"Choose menu position"<<endl;
        cin>>control;
	}
}
void Telephon::SaveFile()
{
	FILE *f;
	f = fopen("telephon.txt", "a");
	for(int i=0; i<c; i++)
	{
		if(i==k) continue;
		fprintf(f,"%s %s %s\n",mas[i].fio.surname,mas[i].fio.name,mas[i].fio.second_name);
		fprintf(f,"%s\n",mas[i].adress);
		fprintf(f,"%d\n",mas[i].year);
		fprintf(f,"%d\n",mas[i].number);
		fprintf(f,"\n");
	}
	fclose(f);
}
Но есть несколько проблем...Непонятно почему не запускается,хотя ошибок нет...И как сделать удаление нескольких элементов?В данном случае за 1 запуск можно удалить 1 абонента...
Вот файл с абонентами:
http://www.rapidshare.ru/1057662
Alik-Soldier вне форума Ответить с цитированием
Старый 29.05.2009, 12:33   #37
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Не так вы удаляете.
Цитата:
Непонятно почему не запускается,хотя ошибок нет
У меня запускается.

Файл с абонентами прикладывайте здесь, во вложении. С рапиды скачать не смог.
Но уже не нужно.

Вот, подкорректировал. Посмотрите. Исходник во вложении.
Другие функции тоже подправил. Например, в функции записи в файл нужно использовать режим "w".
Вложения
Тип файла: rar Alik-Soldier.rar (2.1 Кб, 33 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.05.2009, 12:58   #38
Alik-Soldier
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 38
По умолчанию

При запуске программы вылезает вот такое окно,и программа завершается:
http://s56.radikal.ru/i152/0905/e8/39e73b12cf81.jpg
от чего такое может быть???
Alik-Soldier вне форума Ответить с цитированием
Старый 29.05.2009, 13:03   #39
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Alik-Soldier
При запуске программы вылезает вот такое окно,и программа завершается:
Ну так выберите дебаггер. Написано ж.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.05.2009, 13:08   #40
Alik-Soldier
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 38
По умолчанию

В смысле выбрать дебаггер?
Alik-Soldier вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы в С++ S2S Общие вопросы C/C++ 0 15.03.2009 13:25
Классы bondik Общие вопросы C/C++ 1 14.12.2008 14:19
Классы MaxiMILLION Помощь студентам 4 12.10.2008 14:05
классы ShenDy Общие вопросы C/C++ 1 12.04.2008 14:01