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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2009, 17:08   #1
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию Помогите исправить код одной функции...

Плиз.. помогите исправить код функции 'void Opt()', мне необходимо было создать программу которая читатет файл 'd:\file.txt' , создает и копирует всё его содержимое в типизированный файл 'd:\out.dat'
Данная функция по теории должна работать так, вводишь число равное 500 если оптовая цена какого-либо товара равна 500 то нужно вывести на экран всю строку с этим товаром (название, оптовую и розничную цены)
Программа содержит меню:
1 Запись в файл
2 Вывод на экран
3 Очистка файла //очистка файла 'out.dat'
4 Поиск...
5 Выход

Меню Поиск ...
как раз и содержит данную функцию 'void Opt()'

Код:
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>

struct mon {
  char type[20];
  int opt, rozn;
  char comm[40];
};
int kol=0;
void WriteFile()
{
	FILE *fi,*fo;
	 clrscr();
	 if ((fi=fopen("D:\\file.txt", "r"))==0){
	  cout << "Error open input file!!!" ;
	  return;}
	 if ((fo=fopen("D:\\out.dat","w+b"))==0){
	  cout << "Error open output file!!!";
	  return;}
	 const int dl=80;
	 char s[dl];
	mon a;
	while(fgets(s,dl,fi)){
	strncpy(a.type,s,19);
	a.type[19]='\0';
	a.opt=atoi(&s[20]);
	a.rozn=atoi(&s[25]);
	strncpy(a.comm,&s[30],40);
	fwrite(&a,sizeof(mon),1,fo);
	kol++;
	};
	fclose(fi);
	fclose(fo);

	return;
}

void out()
{
	FILE *fo;
	clrscr();
	if ((fo=fopen("D:\\out.dat","rb"))==0){
	  cout << "Error open output file!!!";
	  return ;}
	int i;
	cout<<"Input number of Zapisi ";
	cin >>i;//после ввода i не забываем нажать Enter
	if (i>kol) {
	  cout << "Zapisi net!!!";
	  return;}

	mon a;
	fseek(fo,sizeof(mon)*(i-1),SEEK_SET);
	fread(&a,sizeof(mon),1,fo);
	cout << "Tip: " << a.type << " opt.: " << a.opt << " rozn: " << a.rozn << endl;
	fclose(fo);
}

void ClearFile()
{
	FILE *fo;
	clrscr();
	if ((fo=fopen("D:\\out.dat","wb"))==0){
	cout << "Error open output file!!!"<<endl;
	  return ;}
	fclose(fo);
}

void Opt()
{
  mon a;
  FILE *fo;

  if ((fo=fopen("D:\\out.dat","r"))==0){
	cout << "Error open output file!!!";
	return;}
  fseek(fo,0,SEEK_SET);
   int res;
   int p;
   do
   {
   res=fread(&a,sizeof(mon),1,fo);
    if (a.opt==p)
    {
      cout<<a.type<<" "<<a.opt<<" "<<a.rozn<<" "<<a.comm<<" "<<endl;
    }
   }
   while(res==1);
  fclose(fo);
   return;
}
void Search()
{
 char menu_2;
 clrscr();
 int p;
 do
 {
   cout <<endl<< "1 Nazvanie" << endl <<"2 Optovaya" << endl << "3 Roznica" << endl << "4 Vozvrat v gl. menu"<< endl;
   menu_2=getch();
   switch(menu_2)
   {
	// case '1':
	  // Nazv();
	 //  break;
	 case '2':
	   cout << "Vvedite optovuy cenu: " << endl;
	   cin >> p;
	   Opt();
	   break;
	// case '3':
	  // Rozn();
	 //  break;
	  };
   if (menu_2=='4') break;
 }
 while(1);
clrscr();
}

void main()
{
 char menu;
 int i;
 kol=0;
 clrscr();
 do
 {
   cout <<endl<< "1 Zapis' v file" << endl <<"2 Vivod na ekran" << endl << "3 Ochistka file" << endl << "4  Search..."<< endl << "5 Vichod" << endl;
   menu=getch();
   switch(menu)
   {
	 case '1':
	   WriteFile();
	   break;
	 case '2':
	   out();
	   break;
	 case '3':
	   ClearFile();
	   break;
	 case '4':
	   Search();
	   break;
		 };
   if (menu=='5') break;
 }
 while(1);
}
текстовый файл выглядит так
Код:
Huindai             350  400  plohoi                                  l
Samsung             500  550  norma                                   l
Sony                300  400  rtye                                    l
Acer                200  350  hgfak                                   l
помогите пожалуйста исправить эту функцию, чтото не понимаю почему она не работает... в программе она выделена красным цветом
символ 'l' в конце строки каждого файла ни имеет значения он просто показывает где заканчивается каждая строка.
hen вне форума Ответить с цитированием
Старый 12.04.2009, 22:42   #2
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Если нужен доступ к одной переменной в двух функциях, как здесь, нужно или передавать ее как параметр функции, или объявить глобальной.Я отметила красным ее. И не нужно объявлять ее в теле функции.
Код:
int p;

void Opt()
{
  mon a;
  FILE *fo;

  if ((fo=fopen("D:\\out.dat","r"))==0){
	cout << "Error open output file!!!";
	return;}
  fseek(fo,0,SEEK_SET);
   int res;   
   do
   {
   res=fread(&a,sizeof(mon),1,fo);
    if (a.opt==p)
    {
      cout<<a.type<<" "<<a.opt<<" "<<a.rozn<<" "<<a.comm<<" "<<endl;
    }
   }
   while(res==1);
  fclose(fo);
   return;
}
void Search()
{
 char menu_2;
 clrscr();

 p=0;
 do
 {
   cout <<endl<< "1 Nazvanie" << endl <<"2 Optovaya" << endl << "3 Roznica" << endl << "4 Vozvrat v gl. menu"<< endl;
   menu_2=getch();
   switch(menu_2)
   {
	// case '1':
	  // Nazv();
	 //  break;
	 case '2':
	   cout << "Vvedite optovuy cenu: " << endl;
	   cin >> p;
	   Opt();
	   break;
	// case '3':
	  // Rozn();
	 //  break;
	  };
   if (menu_2=='4') break;
 }
 while(1);
 clrscr();
}
Svetlag вне форума Ответить с цитированием
Старый 12.04.2009, 23:07   #3
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

спс большое за помощь, но самое обидное то, что сначала я пробовал объявлять переменную таким методом, как вы предложили, но всё равно ничего не работало... оказалась такая тупость я 'clrscr()' не в том месте поставил и из-за этого мой результат всегда стирался...
hen вне форума Ответить с цитированием
Старый 12.04.2009, 23:10   #4
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Я так поняла, вы справились сами?
Svetlag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить код (Delphi)! Cesmir Помощь студентам 18 30.12.2008 03:03
Помогите исправить код Grizzzli Помощь студентам 3 14.12.2008 19:26
Помогите исправить код Tanuska___:) БД в Delphi 4 07.08.2008 17:40
Помогите исправить код student_63 Помощь студентам 5 13.12.2007 18:20