Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 05.10.2019
Сообщений: 5

Вызывает исключение при попытке чтения из файла

07.09.2020, 12:33. Показов 2159. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <fstream>
#include <string>
#include <cstdlib>
#include <algorithm>
 
using namespace std;
 
string InputFilePath = "input.txt";
string OutputFilePath = "output.txt";
 
ifstream InputFile;
 
void TryOpenFile();
string ExtractFromInputFile();
bool CountNumberOfLinesInFile();
 
void TryOpenFile() //проверка открытия файла
{   
    InputFile.exceptions(ifstream::badbit | ifstream::failbit);
 
    try
    {
        cout << "Попытка открыть файл для чтения..." << endl;
        InputFile.open(InputFilePath);
        cout << "Файл успешно открыт..." << endl;
    }
    catch (const ifstream::failure & ex)
    {
        cout << ex.what() << endl;
 
        cout << "Файл не был открыт, проверьте правильность пути." << endl;
    }
    
}
 
string ExtractFromInputFile() //вытаскиваю выражение из файла
{
    string TempExpressionFromFile;
    if (CountNumberOfLinesInFile())
    {
        //ЗДЕСЬ ВЫПОЛНЯЕТСЯ, ЕСЛИ ТОЛЬКО 1 СТРОКА В БЛОКНОТЕ
        getline(InputFile,TempExpressionFromFile);
 
        InputFile.close();
        return(TempExpressionFromFile);
    }
    else
    {
        cout << "В файле больше одной строки. Исправьте файл, чтобы только в первой строке было выражение..." << endl;
        exit(-1);
    }
 
}
 
bool CountNumberOfLinesInFile() //смотрит сколько строк в блокноте используется, если больше 1, то false.
{
    int index=0; //Будет считать количество занятых строк
    istreambuf_iterator<char> begin(InputFile), end;
    index = count(begin, end, char('\n'));
 
    return index == 1 ? true : false;
}
 
int main()
{
    do{
        setlocale(LC_ALL, "Rus");
 
        string ExpressionFromFile; //переменная в которой будет храниться выражение из файла  
 
        TryOpenFile(); //Проверяю открытие файла
        
        ExpressionFromFile = ExtractFromInputFile(); //записываю в переменную результат работы функции по вытаскиванию выражения из файла 
 
        
 
    } while (_getch() != 27);
    
}
Миниатюры
Вызывает исключение при попытке чтения из файла  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2020, 12:33
Ответы с готовыми решениями:

EndOfStreamException при попытке чтения файла
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Ошибка 103 при попытке чтения файла
Здравствуйте. После попытки чтения выдается ошибка runerror 103. Что нужно исправить? procedure TForm1.Button3Click(Sender: TObject); ...

При попытке чтения ini файла возникает ошибка
При выполнении программы возникает ошибка, как ее исправить? #include &lt;windows.h&gt; void main() { char *out = new char;...

4
0 / 0 / 0
Регистрация: 05.10.2019
Сообщений: 5
07.09.2020, 12:38  [ТС]
Программа сначала пытается открыть файл input.txt
если всё хорошо то идёт смотреть сколько строк в файле задействовано
если только одна, то иду её считывать
если больше одной то завершаю

Вот проблема в том что он не хочет у меня читать из файла и записывать в переменную типа string

он должен прочитать какое-то выражение типа (5+3)*(2-1) или sin(1)*5-(6+2) и тд и записать её в string
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
07.09.2020, 12:52
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
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <fstream>
#include <string>
#include <cstdlib>
#include <algorithm>
 
using namespace std;
 
string InputFilePath = "input.txt";
string OutputFilePath = "output.txt";
 
ifstream InputFile;
 
void TryOpenFile();
string ExtractFromInputFile();
bool CountNumberOfLinesInFile();
 
void TryOpenFile() //проверка открытия файла
{
    //InputFile.exceptions(ifstream::badbit | ifstream::failbit);
 
    try
    {
        cout << "Попытка открыть файл для чтения..." << endl;
        InputFile.open(InputFilePath);
        cout << "Файл успешно открыт..." << endl;
    }
    catch (const ifstream::failure& ex)
    {
        cout << ex.what() << endl;
 
        cout << "Файл не был открыт, проверьте правильность пути." << endl;
    }
 
}
 
string ExtractFromInputFile() //вытаскиваю выражение из файла
{
    string TempExpressionFromFile;
    if (CountNumberOfLinesInFile())
    {
        InputFile.seekg(std::ios::beg, 0);
        //ЗДЕСЬ ВЫПОЛНЯЕТСЯ, ЕСЛИ ТОЛЬКО 1 СТРОКА В БЛОКНОТЕ
        getline(InputFile, TempExpressionFromFile);
 
        InputFile.close();
        return(TempExpressionFromFile);
    }
    else
    {
        cout << "В файле больше одной строки. Исправьте файл, чтобы только в первой строке было выражение..." << endl;
        exit(-1);
    }
 
}
 
bool CountNumberOfLinesInFile() //смотрит сколько строк в блокноте используется, если больше 1, то false.
{
    int index = 0; //Будет считать количество занятых строк
    istreambuf_iterator<char> begin(InputFile), end;
    index = count(begin, end, char('\n'));
 
    return index == 1 ? true : false;
}
 
int main()
{
    do {
 
        string ExpressionFromFile; //переменная в которой будет храниться выражение из файла  
 
        TryOpenFile(); //Проверяю открытие файла
 
        ExpressionFromFile = ExtractFromInputFile(); //записываю в переменную результат работы функции по вытаскиванию выражения из файла 
 
 
 
    } while (_getch() != 27);
 
}
0
0 / 0 / 0
Регистрация: 05.10.2019
Сообщений: 5
07.09.2020, 13:16  [ТС]
помогло, но тогда try не работает
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
07.09.2020, 13:26
Лучший ответ Сообщение было отмечено Helty как решение

Решение

Расскоментируй 22 строчку кода.

Добавлено через 44 секунды
Открытие файла можно так же проверять функций is_open.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2020, 13:26
Помогаю со студенческими работами здесь

Программа вылетает при попытке чтения из файла в переменную
Вот код #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace std; int main (void) ...

Ошибка при попытке открытия для чтения текстового файла
Первоначальная задача была такова: Дан файл А, компоненты которого являются целыми числами. Записать в файл А1 все повторяющиеся...

Segmentation fault при попытке чтения файла (которого нет)
Новичок в С. Сижу под линухом. Что-бы освоить аргументы командной строки и i/o файлов в С решил написать программу. #include...

Виснет при попытке чтения
Здравствуйте. HDD 2,5&quot; 500гб вытащил из старого ноута и сделал из него внешний. Собственно проблема: при попытки создания из него...

Ошибка при попытке чтения данных из excel
Доброго времени суток. написал функцию чтения из Excel. Предусловие: excel я уже успешно открыл и поместил в objExcelObj ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru