ifstream не читает файл без видимой причины - PullRequest
0 голосов
/ 28 апреля 2020

Я написал очень простую программу для своего класса и, хотя она компилируется без проблем, я не получаю вывод на cout.

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {

    ifstream fl("data.txt");    
    string s;

    for(int i=0;i<3;i++){
        fl>>s;
        cout<<s;
    }
    return 0;
}

data.txt находится в той же папке, что и main.cpp.

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

data.txt находится в той же папке, что и main.cpp

..., это не обязательно тот же каталог, в котором вы находитесь, когда вы запускаете программа.

В зависимости от среды IDE вы можете находиться в двоичном каталоге, каталоге выпуска, каталоге отладки или в любом из ста различных мест: -)

Обычно вы можете узнать где, просто делая что-то вроде одного из:

system("pwd")
system("cd")
system("cmd /c cd")

в вашем коде, а затем посмотреть, что он выводит. Я не совсем уверен, сработает ли cd сам по себе, так как это может быть внутренняя команда cmd.

Тогда вам придется либо убедиться, что файл данных в этом месте или используйте путь к нему, который найдет его правильно. Я стараюсь запускать свои исполняемые файлы из командной строки даже при сборке в IDE, просто чтобы убедиться, что я в нужном месте.

1 голос
/ 28 апреля 2020

В C ++ нет правила, согласно которому файл должен находиться в той же папке, что и файл, содержащий код, который его читает.

Почти наверняка файл не открывается, поскольку он находится в неправильном месте. Вы можете проверить это с помощью этого кода

ifstream fl("data.txt"); 
if (!fl.is_open())
    cout << "failed to open file\n";

Всегда проверяйте, что открытие файла завершается успешно.

...