Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ololo_xa
0 / 0 / 5
Регистрация: 12.12.2015
Сообщений: 55
#1

Найти причины возникновения ошибки "out of range" (файловый ввод/вывод) - C++

03.11.2016, 22:37. Просмотров 177. Ответов 2
Метки нет (Все метки)

Кликните здесь для просмотра всего текста
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
if(READ) {
        char text2[55];
        std::ifstream *file=new std::ifstream("Rec.txt");
        std::ifstream *file1=new std::ifstream("Rec.txt");
        std::ifstream *file2=new std::ifstream("Rec.txt");
        std::string s,s1,s2;//строка
        int i,j;//номер элемента, которым заканчивается число
        int u;//количество очков через int
        int t,t1,t2;//время максимумма
        int line,line2;
        int max=2000000, max1=2000000, max2=20000000;
        for(int q=1;(std::getline(*file,s) != NULL);q++ )
        {
        char *rec;
        char *tim;
        for(i=0;i<20;i++)
            if(s[i]=='|')
            {
                rec=new char[i];
                break;
            }
        for(int k=0;k<i;k++)
            rec[k]=s[k];
        for(j=i+3;j<20;j++)
            if(s[j]=='|') {
                tim=new char[j-i-3];
                break;
            }
        for(int k=0;k<j-i-3;k++)//j
            tim[k]=s[i+3+k];
        u=atoi(rec);
        if(atoi(rec)<max)
        {
            line=q;
            max=atoi(rec);
            t=atoi(tim);
        }
        delete [] rec;
        delete [] tim;
        }
        file->close();
        delete file;
        glPopMatrix();
        for(int q=1;(std::getline(*file1,s1) != NULL);q++ )
            if(q==line) continue;
            else {
        char *rec;
        char *tim;
        for(i=0;i<20;i++)
            if(s1[i]=='|')
            {
                rec=new char[i];
                break;
            }
            for(int k=0;k<i;k++)
                rec[k]=s1[k];
            for(j=i+3;j<20;j++)
                if(s1[j]=='|') {
                    tim=new char[j-i-3];
                    break;
                }
            for(int k=0;k<j-i-3;k++)//j
                tim[k]=s1[i+3+k];
            u=atoi(rec);
            if(atoi(rec)<max1)
            {
                line2=q;
                max1=atoi(rec);
                t1=atoi(tim);
            }
                delete [] rec;
                delete [] tim;
        }
 
        file1->close();
        delete file1;
        for(int q=1;(std::getline(*file2,s2) != NULL);q++ ) {
        if(q==line || q==line2)
        continue;
        else 
            {
        char *rec;
        char *tim;
        for(i=0;i<20;i++)
            if(s2[i]=='|')
            {
                rec=new char[i];
                break;
            }
        for(int k=0;k<i;k++)
            rec[k]=s2[k];
        for(j=i+3;j<20;j++)
            if(s2[j]=='|') {
                tim=new char[j-i-3];
                break;
            }
        for(int k=0;k<j-i-3;k++)//j
            tim[k]=s2[i+3+k];
        u=atoi(rec);
        if(atoi(rec)<max2)
        {
            max2=atoi(rec);
            t2=atoi(tim);
        }
        delete [] rec;
        delete [] tim;
        }
        }
        file2->close();
        delete file2;
        glPopMatrix();
        glColor3f(1.0,0.0,0.0);
        if(max==max1)
            if(t>t1) sprintf(text2, "First %d. Time - %d", max,t);//30
            else sprintf(text2, "First %d. Time - %d", max,t1);//30
        else sprintf(text2, "First %d. Time - %d", max,t);//30
        drawString(GLUT_BITMAP_TIMES_ROMAN_24,text2,0.01,0.08);
        if(max==max1)
            if(t>t1) sprintf(text2, "Second - %d. Time - %d", max,t1);//30
            else sprintf(text2, "Second - %d. Time - %d", max,t);//30
        else sprintf(text2, "Second - %d. Time - %d", max1,t1);//30
        drawString(GLUT_BITMAP_TIMES_ROMAN_24,text2,0.01,0.05);
        if(max1==max2)
            if(t1>t2) sprintf(text2, "Third - %d. Time - %d", max1,t2);//30
            else sprintf(text2, "Third - %d. Time - %d", max1,t1);//30
        else sprintf(text2, "Third - %d. Time - %d", max2,t2);
        drawString(GLUT_BITMAP_TIMES_ROMAN_24,text2,0.01,0.02);
    }

Вот кусок кода . загружая файл
C++
1
2
3
std::ifstream *file=new std::ifstream("Rec.txt");
        std::ifstream *file1=new std::ifstream("Rec.txt");
        std::ifstream *file2=new std::ifstream("Rec.txt");
выдаёт ошибку: Debug Assertion Failde! Line:1662
Expression: string subscript out of range.

Содержимое документа:
Кликните здесь для просмотра всего текста

0| 0|
0| 0|
1111| 2145|
423| 5215|
253| 153|

Кто чем поможет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2016, 22:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Найти причины возникновения ошибки "out of range" (файловый ввод/вывод) (C++):

Найти причины возникновения ошибки "идентификатор ShellExecuteW не определен"
Ребята помогите пожалуйста. Пытаюсь запустить код шелэкзек ...

Найти причины возникновения ошибки "Segmentation fault" в шаблонном лямбда-выражении (C++11)
Добрый день. Есть такой код:template&lt;typename ChipSelect, typename T =...

Найти причины возникновения ошибки "heap corruption detected after normal block #331" и исправить эту ошибку
добрый день,нужна ваша помощь. при выводе массива выдает такую ошибку &quot;heap...

"Морской Бой": найти причины возникновения ошибок в коде
Доброго добра Всем тем, кто сейчас зашёл на эту страницу. Помогите понять,...

Найти причины и способы исправления ошибок в коде (файловый ввод/вывод)
Помогите пожалуйста найти ошибку // ConsoleApplication1.cpp: определяет...

Найти причины и способы устранения ошибок в коде (структуры, файловый ввод/вывод)
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace...

2
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,201
Завершенные тесты: 1
03.11.2016, 23:11 #2
Если Вы открыли файл Rec.txt в поток file (а такой конструктор именно открывает файл), то в поток file1 его уже открыть нельзя до тех пор, пока не закроется file.
Используйте конструктор по умолчанию:
C++
1
ifstream file1,file2,file;
и открывайте методом open
C++
1
2
3
4
5
6
file.open();
...
file.close();
file1.open()
...
file1.close();
1
nd2
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
04.11.2016, 00:02 #3
Цитата Сообщение от ololo_xa Посмотреть сообщение
Кто чем поможет?
Открытие файла для чтения всегда проверять нужно, и продолжать, только если открылся. А ошибка, скорее всего, из-за того, что в пустую строку ничего не прочиталось (так и осталась пустой), а дальше (17 стр.) к ней обращение по индексу.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2016, 00:02
Привет! Вот еще темы с решениями:

Найти причины и способы устранения ошибок в коде и организовать файловый ввод/вывод
Уплотнить массив, удалив из него все нулевые строки и столбцы Почему то код не...

Решить задачу на файловый ввод/вывод (игра "Города")
Не могу понять задачу и решить её на Си!!! Срочно! Дело в том что я сейчас на...

Структура "Телефонная книга", файловый ввод/вывод
#define _CRT_SECURE_NO_WARNINGS #include&lt;iostream&gt; #include&lt;cstdio&gt;...

Исправить ошибку "can't open input file" (файловый ввод/вывод)
в программе прописан параметр - название текстового файла pushkin.txt...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru