Форум программистов, компьютерный форум CyberForum.ru

Компилируется но при выполнении ошибка - C++

Восстановить пароль Регистрация
 
snake5129x
1 / 1 / 0
Регистрация: 29.09.2012
Сообщений: 52
03.03.2013, 20:59     Компилируется но при выполнении ошибка #1
Не могу понять в чем ошибка программа компилируется но крашится посля выполнения нескольких строчек кода
P.S в данном коде открываю файл считываю в строки условия и действия , Возможно намудрил с условиями или с открытием файла

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
using namespace std;
 int main()
{
//----------------------------------------------
    string str ,str1,str2,fakt1,fakt2,deistv;
    int locate; //ïîëîæåГ*ГЁГҐ ïîçèöèè êóðñîðГ* 
    int cnt;
//------------------------------------------------
 
    ifstream in("rules.txt");//ГІГіГІ ГґГ*éë, êîòîðûé Г*óæåГ*
    if (in.is_open()){
         
       int posIf = str.find("if");//îïðåäåëÿåì ïîçèö 
       int posAnd = str.find("and");//îïðåäåëÿåì ïîçèö 
       int posThen = str.find("then");//îïðåäåëÿåì ïîçèö 
    
           if (!in.eof()){
                 getline(in,str);//Г±Г·ГЁГІГ*ëè ïåðâóþ ñòðîêó      
              cout <<str<< endl;//ïðîâåðêГ* ñòðîêè
           if ( str.find("and") != std::string::npos ){ //åñëè ГўГҐГ°Г*ГҐГІ -1 Г§Г*Г*Г·ГЁГІ Г*ГҐГІ  
              cout <<"Esti 2 fakta i odno deistvie "<<endl;//ïðîâåðêГ*
                   fakt1 = str;
                   fakt1.resize(posAnd-1);//ГіГ¤Г*ëÿåì and Гў ГЄГ®Г*öå ñòðîêè
                   fakt1.erase(posIf,3);//ГіГ¤Г*ëÿåì if Гў Г*Г*Г·Г*ëå Г±ГІГ°
                   //âûòÿГ*óëè ïåðâ ГґГ*ГЄГІ
              cout <<"Fakt 1: "<< fakt1 <<endl;//ïðîâåðêГ*
                   fakt2 = str;
                   fakt2.erase(posThen); //ГіГ¤Г*ëÿåì then ГЁ ГЄГ®Г*ГҐГ¶ ñòðîêè
                   fakt2.erase(posIf,posAnd+3);//ГіГ¤Г*ëÿåì Г± ïîçèö if ГЇГ® ïîçèö And+3
                   //âûòÿГ*óëè âòîð ГґГ*ГЄГІ
              cout <<"Fakt 2: "<< fakt2 <<endl;//ïðîâåðêГ*
                   deistv = str;
                   deistv.erase(posIf,posThen+4);//ГіГ¤Г*ëÿåì Г± ïîçèö if ГЇГ® ïîçèö And+3
                   //âûòÿГ*óëè äåéñòâ
             cout <<"Deistv: "<< deistv <<endl;//ïðîâåðêГ*
                             }
           else  {
             cout <<"Esti 1 fakt i odno deistvie "<<endl;
                  fakt1 = str;
                  fakt1.resize(posThen-1);//ГіГ¤Г*ëÿåì and Гў ГЄГ®Г*öå ñòðîêè
                  fakt1.erase(posIf,3);//ГіГ¤Г*ëÿåì if Гў Г*Г*Г·Г*ëå Г±ГІГ°
             cout <<"Fakt 1: "<< fakt1 <<endl;//ïðîâåðêГ*
                  deistv = str;
                  deistv.erase(posIf,posThen+4);//ГіГ¤Г*ëÿåì Г± ïîçèö if ГЇГ® ïîçèö And+3
             cout <<"Deistv: "<< deistv <<endl;//ïðîâåðêГ*
                             }//end else  
                  }//end eof        
    }
     else  cerr << "Can't open file!" <<endl;
 in.close(); //Г§Г*êðûëè âõîäГ*îé ГґГ*éë rules 
    system("PAUSE");
    return 0;
    
}
сам файл rules.txt
XML
1
2
if желание - отдых and ухабистая - дорога использовать джип
if место отдыха - горы then дорога  - ухабистая
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 20:59     Компилируется но при выполнении ошибка
Посмотрите здесь:

C++ Ошибка при выполнении программы.
Ошибка при выполнении C++
HELP! Ошибка при выполнении оператора delete[] C++
Ошибка при выполнении C++
ошибка при выполнении программы! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.03.2013, 09:48     Компилируется но при выполнении ошибка #2
Тут всё криво. В 17, 18, 19 строке определяете позиции в строке, которая ещё не считана из файла. И т.д....
snake5129x
1 / 1 / 0
Регистрация: 29.09.2012
Сообщений: 52
04.03.2013, 11:21  [ТС]     Компилируется но при выполнении ошибка #3
точно.спасибо большое не заметил
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.03.2013, 11:54     Компилируется но при выполнении ошибка #4
Там много других ошибок. Например, 37 строка:
C++
1
deistv.erase(posIf, posThen+4);//удаляем с позиц if по позиц And+3
В первой строке нет then, поэтому здесь будет ошибка. В коментариях одно написано, в коде другое.

Добавлено через 7 минут
Главное непонятно, как в таком тексте действие отделить от фактов? Если я правильно понял, то факты через and отделены друг от друга. А действие от фактов чем отделено? Или в первом предложении then пропущено?

Добавлено через 17 минут
Вот так работает, только в первую строку нужно добавить then (if желание - отдых and ухабистая - дорога then использовать джип) :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
using namespace std;
 
int main()
{
    setlocale(0, "");
 
//----------------------------------------------
    string str , str1, str2, fakt1, fakt2, deistv;
    int locate; //положение позиции курсора 
    int cnt;
//------------------------------------------------
 
    ifstream in("rules.txt");//тут файл, который нужен
    if (in.is_open())
    {
       int posIf;
       int posAnd; 
       int posThen;
       
       while (!in.eof())
       {
             getline(in, str);//считали первую строку      
         cout << str << endl;//проверка строки
 
              posIf = str.find("if");//определяем позиц 
              posAnd = str.find("and");//определяем позиц 
              posThen = str.find("then");//определяем позиц     
           
           if ( str.find("and") != std::string::npos ) //если вернет -1 значит нет  
           { 
              cout <<"Esti 2 fakta i odno deistvie "<<endl;//проверка
 
                   fakt1 = str;
                   fakt1.resize(posAnd-1);//удаляем and в конце строки
                   fakt1.erase(posIf,3);//удаляем if в начале стр
                   //вытянули перв факт
              cout <<"Fakt 1: "<< fakt1 << endl;//проверка
                   fakt2 = str;
                   fakt2.erase(posThen); //удаляем then и конец строки
                   fakt2.erase(posIf, posAnd+3);//удаляем с позиц if по позиц And+3
                   //вытянули втор факт
              cout <<"Fakt 2: "<< fakt2 <<endl;//проверка
                   deistv = str;
                   deistv.erase(posIf,posThen+4);//удаляем с позиц if по позиц And+3
                   //вытянули действ
             cout <<"Deistv: "<< deistv <<endl;//проверка
           }
           else 
           {
             cout <<"Esti 1 fakt i odno deistvie "<<endl;
 
                  fakt1 = str;
                  fakt1.resize(posThen - 1);//удаляем and в конце строки
                  fakt1.erase(posIf,3);//удаляем if в начале стр
             cout <<"Fakt 1: "<< fakt1 <<endl;//проверка
                  deistv = str;
                  deistv.erase(posIf,posThen+4);//удаляем с позиц if по позиц And+3
             cout <<"Deistv: "<< deistv <<endl;//проверка
            }//end else  
        }//end eof        
    }
    else  cerr << "Can't open file!" <<endl;
    
    in.close(); //закрыли входной файл rules 
    
    system("PAUSE");
    return 0;
    
}
Коментарии оставил родные (не везде правильные).
snake5129x
1 / 1 / 0
Регистрация: 29.09.2012
Сообщений: 52
06.03.2013, 00:01  [ТС]     Компилируется но при выполнении ошибка #5
Спасибо большое , да вы все правильно поняли, выкладываю готовую лабу может кому то пригодится
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
using namespace std;
    
//------------------------------------------------------------------------------
    string str , str2, fakt1, fakt2, deistv;
//------------------------------------------------------------------------------ 
    int cnt;
//------------------------------------------------------------------------------ 
//-------------------Заметки----------------------------------------------------
/*fstream inOut("name.in")
  запись и чтение из файла не переоткрывая файл 
  if(mem.eof())//
    mem.clear();//
   .......................
    mem.seekp(0,ios::end);//дозапись в файл перевод курсора в конец файла
    ......................
*/
//-------------------------Поиск 1 факта----------------------------------------
int findFakt1(){
    ifstream mem("work_mem.in");//файл памяти
    if (mem.is_open()){ //если файл открылся 
        while (!mem.eof()){//пока нет конца файла
          while( getline(mem,str2)){
                 if  (str2.find(fakt1) != std::string::npos ){//
                  cout<<"Fact1 exists in file memory"<<endl;
                   cnt=1;
                  cout<<cnt<<endl;
                 }//if
                 else 
                 cout<<"Fact1 Not fiind in file memory"<<endl;
           }
           }
         }
    else cerr << "Can't open file Work Memory!" <<endl;
    mem.close(); 
    return 0;
    }
//------------------------------------------------------------------------------
 
//-------------------------Поиск 2 факта в файле -------------------------------
 
int findFakt2(){
    ifstream mem("work_mem.in");//файл памяти
    if (mem.is_open()){ //если файл открылся 
         while (!mem.eof()){//пока нет конца файла
           while(getline(mem,str2)){
                 if  (str2.find(fakt2) != std::string::npos ){//
                  cout<<"Fact2 exists in file memory"<<endl;
                  cnt+=2;
                  cout<<cnt<<endl;
                 }
                 else 
                 cout<<"Fact2 Not fiind in file memory"<<endl;
           }
           }
         }
    else cerr << "Can't open file Work Memory!" <<endl;
    mem.close(); 
    return 0;
    }
//------------------------------------------------------------------------------ 
int w_File_Answer(){ 
    if (cnt%2!=0){ //если счетч дел на2      
    fstream mem("work_mem.in");//файл памяти
     if (mem.is_open()){
      mem.seekp(0,ios::end);
      mem << deistv << endl;
     }
     else cerr << "Can't open file MEMORY!" <<endl;
     mem.close(); 
    }
  return 0;  
}
//------------------------------------------------------------------------------ 
//------------------------------------------------------------------------------ 
int w_File_Memory(){ 
    if (cnt%2!=0){ //если счетч дел на2      
    fstream out("answer.out");//файл памяти
     if (out.is_open()){
      out.seekp(0,ios::end);
      out << deistv << endl;
     }
     else cerr << "Can't open file ANSWER!" <<endl;
     out.close(); 
    }
  return 0;  
}
//------------------------------------------------------------------------------ 
 
int main()
{
    setlocale(0, "");
 
    ifstream in("rules.in");//тут файл, который нужен
    if (in.is_open())
    {
       int posIf;
       int posAnd; 
       int posThen;
       
       while (!in.eof())
       {
             getline(in, str);//считали первую строку      
             cout << str << endl;//проверка строки
 
              posIf = str.find("if");//определяем позиц 
              posAnd = str.find("and");//определяем позиц 
              posThen = str.find("then");//определяем позиц     
           
           if ( str.find("and") != std::string::npos ) //если вернет -1 значит нет  
           { 
              cout <<"Esti 2 fakta i odno deistvie "<<endl;//проверка
                   fakt1 = str;
                   fakt1.resize(posAnd-1);//удаляем and в конце строки
                   fakt1.erase(posIf,3);//удаляем if в начале стр
                   //вытянули перв факт
              cout <<"Fakt 1: "<< fakt1 << endl;//проверка
                   fakt2 = str;
                   fakt2.erase(posThen-1); //удаляем then и конец строки
                   fakt2.erase(posIf, posAnd+4);//удаляем с позиц if по позиц And+3
                   //вытянули втор факт
              cout <<"Fakt 2: "<< fakt2 <<endl;//проверка
                   deistv = str;
                   deistv.erase(posIf,posThen+5);//удаляем с позиц if по позиц And+3
                   //вытянули действ
             cout <<"Deistv: "<< deistv <<endl;//проверка  
                  //rwFile_Mem();//функция    
                  findFakt1();  
                  findFakt2(); 
                  w_File_Answer();
                  w_File_Memory();  
           }
           else 
           {
             cout <<"Esti 1 fakt i odno deistvie "<<endl;
                  fakt1 = str;
                  fakt1.resize(posThen-1);//удаляем and в конце строки
                  fakt1.erase(posIf,3);//удаляем if в начале стр
                  //вытянули перв факт
             cout <<"Fakt 1: "<< fakt1 <<endl;//проверка
                  deistv = str;
                  deistv.erase(posIf,posThen+5);//удаляем с позиц if по позиц And+3
                  //вытянули действ
             cout <<"Deistv: "<< deistv <<endl;//проверка
                    findFakt1();
                    w_File_Answer();
                    w_File_Memory();  
            }//end else  
        }//end eof        
    }
    else cerr << "Can't open file Rules !" <<endl;
    
    in.close(); //закрыли входной файл rules 
    system("PAUSE");
    return 0;
        
}
Yandex
Объявления
06.03.2013, 00:01     Компилируется но при выполнении ошибка
Ответ Создать тему
Опции темы

Текущее время: 12:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru