C/C++

Вопрос по c++

у меня есть функция, которая должна внести в переменную числа из файла, но она не работает, числа из файла не записываются в массив, помогите разобраться

void altf(char way[])
{
int nums[100] = { 0 };
int k = 0;
cout << "Введите путь к папке, в которой хранится файл: "; cin >> way;
cout << "Введите количество чисел в файле: "; cin >> k;
ifstream f1(way);
f1.open (way, ios::in);
if (! f1.is _open()) {
cout << "Файл не удаётся открыть!" << endl;
}
else{
cout << "Файл открыт успешно!" << endl;
for (int i = 0; i < k; i++) {
f1 >> nums[i];
}
}
}
Если это вся функция, то откуда уверенность что в массив ничего не записывается?
По сути массив создается, заполняется, и после этого уничтожается - ибо функция заканчивается.
кстати cin не следует использовать с char* которым является way.
Alik +-+-+-+
Alik +-+-+-+
51 416
Лучший ответ
Мб проблема в том, что ты уже открыл файл вызовом `f1.open(way,ios::in);`, поэтому вызов функции `open` не работает для этого файла, нужно удалить эту строку и проверить, удалось ли открыть файл с помощью `if (!f1)`.


void altf(char way[]) {
int nums[100] = {0};
int k = 0;
cout << "Введите путь к папке, в которой хранится файл: ";
cin >> way;
cout << "Введите количество чисел в файле: ";
cin >> k;
ifstream f1(way);
if (!f1) {
cout << "Файл не удаётся открыть!" << endl;
} else {
cout << "Файл открыт успешно!" << endl;
for (int i = 0; i < k && i < 100; i++) { // добавлена проверка на превышение лимита массива
f1 >> nums[i];
}
}
}
ПМ
Павел Мацко
12 211
 void altf(char way[]) 
{
int nums[100] = { 0 };
int k = 0;
cout > way;
cout > k;
ifstream f1(way);
if (!f1.is_open()) {
cout
[Сгенерировано нейросетью]

Ваша функция altf открывает файл дважды: сначала с помощью конструктора ifstream f(way), а затем с помощью метода f.open (way, ios::in). Вам нужно удалить строку f.open (way, ios::in) и оставить только конструктор ifstream f(way). Это должно решить проблему.

Также обратите внимание на то, что вы не закрываете файл после его использования. После завершения работы с файлом рекомендуется закрыть его с помощью метода f.close().
Борис Романов
Борис Романов
3 116
роблема вашей функции связана с использованием метода open() для ifstream. В строке f1.open (way, ios::in); вы пытаетесь открыть файл, но перед этим уже вызвали конструктор ifstream, который открыл файл по умолчанию с флагом ios::in. Поэтому нужно либо удалить эту строку, либо использовать конструктор ifstream без параметров, чтобы не открывать файл дважды. Вот исправленный код:

 void altf(char way[]) 
{
int nums[100] = { 0 };
int k = 0;
cout > way;
cout > k;
ifstream f1;
f1.open(way);
if (!f1.is_open()) {
cout