Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: 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
Ваше имя:
Пароль:
Цитировать Используйте тэги для выделения текста: Код: [code][/code] Жирный: [b][/b] Наклонный: [i][/i] URL: [url][/url]
Сообщение:
Прикрепить: