Регистрация
13 Окт 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
C++ не открывает "laba.txt", в файле массив(1 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75), сам файл в той же директории, что и программа.





Выдаёт просто "Исходный массив A:

Сумма элементов, удовлетворяющих условию Ai > 12 (S): 0

Количество элементов, удовлетворяющих условию Ai > 12 (K): 0"





#include <iostream>

#include <fstream>

#include <vector>



int main() {

system("chcp 1251>nul");

std::ifstream inputFile("laba.txt");

std::vector<int> array;

int element;



while (inputFile >> element) {

array.push_back(element);

}



inputFile.close();



int S = 0;

int K = 0;



for (int i = 0; i < array.size(); i++) {

if (array > 12) {

S += array;

K++;

}

}



std::cout << "Исходный массив A: ";

for (int i = 0; i < array.size(); i++) {

std::cout << array << " ";

}

std::cout << std::endl;

std::cout << "Сумма элементов, удовлетворяющих условию Ai > 12 (S): " << S << std::endl;

std::cout << "Количество элементов, удовлетворяющих условию Ai > 12 (K): " << K << std::endl;



system("pause>nul");

return 0;

}
 
Эта чо такое
 
Проблема может быть связана с тем, что программа не может найти файл "laba.txt" в текущей директории. Убедитесь, что файл "laba.txt" действительно находится в той же директории, что и программа, и что у программы есть права на чтение этого файла. Если файл находится в другой директории, убедитесь, что вы указали правильный путь к файлу в коде программы.
Ответ нейросети. Учись потихоньку сам работать с этим, очень помогает. Сейчас не могу разобрать программу сама, попробуй мой ответ или задай вопрос GPT очень помогает в учёбе.
 
Кто вас учит так писать программы? Где у вас в программе обработка ошибок?
Ваш случай - это яркий пример, когда программист сам себе злобный Буратина и из-за своей лени или неумения вынужден скакать вокруг программы с бубном и пытаться понять, а почему это не работает. Вместо того, чтобы это за него сделала программа.
Вы утверждаете, что файл находится в том же каталоге, что и программа, но было бы неплохо удостоверится, что это действительно так. Для этого есть например функция char *getcwd(char *buf, size_t size); которая в нормальных системах подключается через unistd.h а в винде, скорее всего, будет в io.h
Эта функция записывает в буфер buf размером size текущий рабочий каталог программы. Организуйте его вывод в терминал, дабы убедиться, что ваше представление о рабочем каталоге программы совпадает с реальным положением вещей.
Далее, использование конструкций вида std::ifstream inputFile("laba.txt"); затрудняет обработку ошибок. Лучше создать пустой объект, открыть файл при помощи open() и проверить факт открытия при помощи is_open()
Чтение из файла конструкцией вида while (inputFile >> element) {
array.push_back(element);
} также нельзя назвать удачным решением. Тут, опять же, нет никакой обработки ошибок. Когда ваш файл начнет открываться, рекомендую попробовать внести в его середину какой-нибудь мусор и посмотреть, как подобную ситуацию обрабатывает ваша чудесная конструкция.
И, наконец, вишенка на торте. Использование в функции system команд без указания полного пути (особенно в DOS/Windows) открывает возможность атакующему выполнить произвольный код в системе от имени пользователя, запустившего уязвимую программу.
 
>сам файл в той же директории, что и программа.
Выведи через system текущую директорию и убедись, что предположение верно system("echo %cd%");
Обрати внимание, что при запуске через отладчик студии файл действительно должен быть там где программа (т.е. НЕ там, где находится исполняемый файл, а там, где файл с исходником), а вот при запуске через проводник - в другом месте, рядом с бинарником.

Учти, что при запуске через какой-нибудь ярлык или подобное никто НЕ ГАРАНТИРУЕТ, где будет находится текущая директория, поэтому файлы данных для чтения из комплекта программы всегда вычисляются относительно пути от папки с бинарником, который берется из массива argv или иным путём.
 
Назад
Сверху