Форум: Форум C++Разное
Новые темы: 00
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нужна помощь в исправлении кода одной функции...
 
 автор: kandrey58region   (12.04.2009 в 20:58)   письмо автору
 
 

Плиз.. помогите исправить код функции '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' в конце строки каждого файла ни имеет значения он просто показывает где заканчивается каждая строка.

  Ответить  
 
 автор: GeorgeIV   (13.04.2009 в 10:25)   письмо автору
 
   для: kandrey58region   (12.04.2009 в 20:58)
 

На первый взгляд - переменная p инициализируется в одной функции, а используешь (пытаешься) в другой. Так как они локальные, то область действия в пределах функции. Сделай p глобальной.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования