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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2017, 17:36   #1
Ossuary
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 11
По умолчанию Работа с файлом С++

Добрый вечер. Такое задание : Создать файл, содержащий сведения об отправлении поездов дальнего следования.
Написать программу, которая позволяет получить следующую справочную информацию:
1) время отправления поездов в город Х с часами отправления;
2) поезда, которые удовлетворяют количеству заданного интервала билетов.

Прикрепляю свой код, всё в принципе работает, но только 3 поезда, если четвертый маршрут добавлять, то в файл он его записывает, но читать более 3-х строк в самой консоли не может, соответственно программа закрывается ошибкой. Может кто нибудь сможет указать на ошибку?
Код:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
struct a
{ int c;
int n;
double t;
char name[10];};
 
int main(){
struct a s[4];
int v=0,l=0,k=0;
    begin:
cout<<" 1-zapis\n"<<"2-chenye"<<endl;
cin>>v;
 
       if(v==1)
       {ofstream f("D:\\f.txt", ios::app);
       for (;;)
       {cout<<"kol-vo biletov"<<endl;
       cin>>s[k].c;
       cout<<" nomer marshruta"<<endl;
       cin>>s[k].n;
       cout<<"vremia otpravki"<<endl;
       cin>>s[k].t;
     
       cout<<"name"<<endl;
       cin>>s[k].name;
        f<<s[k].n<<"  Vremia:"<<s[k].t<<"__"<<s[k].name<< "__Bileti:"<<s[k].c<<endl;
        k++; system("cls");
    cout<<"Marshrut dobavlen!"<<endl
    <<"1 - Dobavit eshe"<<endl<<"2 - exit"<<endl;
        cin>> l; system("cls");
        if (l == 1)
        {continue; system("cls");} 
        else
        {break; system("cls");}}
    f.close();
    goto begin;}
 
       if(v==2)
       {ifstream f("D:\\f.txt");
       for(int i=0;i<3;i++)
       {f>>s[i].n;
        f>>s[i].name;
       cout<<s[i].n<<"    "<<s[i].name<<endl;}
       f.close();
       goto begin;
       }
       
       if(v==3)
       {
       int s1;
       int s2;
       ifstream f("D:\\f.txt");
cout<<"\n\n   Vvedute c\n";
cout<<"\n";
cin>>s1;
cin>>s2;
for(int i=0;i<=4;i++)
if(s[i].c>=s1 && s[i].c<=s2){
cout.width(20);cout<<s[i].c;
cout.width(20);cout<<s[i].name<<"\n";}
 f.close();
 goto begin;}
  if(v==4)
  {int i;
          char text[10];
   cout<<"Vvod text"<<endl;
   cin>>text;
   for(i=0;i<=4;i++)
       if (strstr(s[i].name,text)){
          strcpy(text, s[i].name);
          cout<<text<<" "<<s[i].c<<endl;
   puts ("Correct answer!");}
    system("PAUSE");
 
          goto begin;}
  
    return EXIT_SUCCESS;}
Ossuary вне форума Ответить с цитированием
Старый 11.05.2017, 19:08   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

Цитата:
Сообщение от Ossuary Посмотреть сообщение
Код:
for(int i=0;i<3;i++)
- вот в этой строке 3 на 4 исправь да и все.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 11.05.2017, 19:32   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

Вообще Ваша программа нуждается в глубокой доработке. Вот мой вариант этой программы.
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string.h>
#pragma hdrstop
using namespace std;
//---------------------------------------------------------------------------
#pragma argsused
struct a
{
int c, n;
double t;
char name[10];
};

int main(int argc, char* argv[])
{
struct a s[4];
int v=0,l=0,k=0;

begin:
system("cls");
cout << "1-zapis\n2-chtenye\n";
cin >> v;

if(v == 1)
{
ofstream fo("f.txt", ios::app);
for(;;)
{
cout << "kol-vo biletov" << endl;
cin >> s[k].c;
cout << " nomer marshruta" << endl;
cin >> s[k].n;
cout << "vremia otpravki" << endl;
cin >> s[k].t;

cout << "name" << endl;
cin >> s[k].name;

fo << s[k].c << " " << s[k].n << " " << s[k].t << " " << s[k].name << endl;
k++;
system("cls");
cout << "Marshrut dobavlen!" << endl
<< "1 - Dobavit eshe" << endl << "2 - exit" << endl;
cin >> l;
system("cls");
if(l == 1)
  continue;
else
  break;
}//for(;;)
fo.close();
goto begin;
}//if(v == 1)

if(v == 2)
{
ifstream fi("f.txt");
for(int i = 0; i < 4; i++)
{
    fi >> s[i].c >> s[i].n >> s[i].t >> s[i].name;
    cout << s[i].c << " " << s[i].n << " " << s[i].t << " " << s[i].name << endl;
}
fi.close();
system("pause");
goto begin;
}
//--------------------------------------------------------------------------------
if(v == 3)
{
int s1;
int s2;
ifstream f("f.txt");
cout<<"\n\n   Vvedute c\n";
cout<<"\n";
cin>>s1;
cin>>s2;
for(int i=0;i<=4;i++)
if(s[i].c>=s1 && s[i].c<=s2){
cout.width(20);cout<<s[i].c;
cout.width(20);cout<<s[i].name<<"\n";}
f.close();
goto begin;}

if(v == 4)
{
int i;
char text[10];
cout << "Vvod text" << endl;
cin>>text;
for(i=0;i<=4;i++)
if(strstr(s[i].name,text))
{
strcpy(text, s[i].name);
cout<<text<<" "<<s[i].c<<endl;
puts("Correct answer!");}
system("PAUSE");

goto begin;
}
  
return EXIT_SUCCESS;
}
//---------------------------------------------------------------------------
Замечания:
1) Не желательно называть входной и выходной файл одним и тем же именем(f). Вроде особой ошибки в этом нету, но все равно - плохой стиль программирования. Я назвал разными именами.
2) Когда читаешь оператором "fo >>", то нужно в файле предварительно записать просто числа через пробел без всяких Vremya и Bileti, иначе входной поток придется разбирать по байтам и сложность значительно увеличиться.
Программу проверил и исправил до минусов.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 11.05.2017, 19:36   #4
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

После break также нужно убирать system("cls"); что я сделал, потому что брякится моментально.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 12.05.2017, 07:11   #5
Ossuary
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 11
По умолчанию

Огромное спасибо! всё работает, только вот еще один вопросик: при функции "v==3" после ввода диапазона билетов результат мгновенно появляется и сразу исчезнет. Какую функцию можно прописать чтобы не исчезал результат?
Ossuary вне форума Ответить с цитированием
Старый 12.05.2017, 07:13   #6
Ossuary
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 11
По умолчанию

Разобрался)) system("PAUSE"); добавил.
Ossuary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Работа с файлом marina12 Помощь студентам 2 26.03.2013 09:21
работа с файлом Sergey Bi. старший Общие вопросы Delphi 5 16.05.2011 10:27
Работа с файлом orkus Общие вопросы Delphi 4 02.04.2010 04:51
работа с файлом Cpluser Общие вопросы .NET 3 22.11.2009 22:45
С++ работа с файлом. НедоВовик Помощь студентам 1 05.07.2009 18:22