fstream ifstream Я не понимаю, как загрузить файл данных в свою программу

Мой профессор очень умен, но ожидает, что такие нубы, как я, будут просто знать, как программировать С++. Я не понимаю, как работает функция fstream.

У меня будет файл данных с тремя столбцами данных. Мне нужно будет определить с помощью логарифма, представляет ли каждая строка данных круг, прямоугольник или треугольник — это легко. Я не понимаю, как работает функция fstream.

Я думаю я:

#include < fstream > 

тогда я должен объявить свой файловый объект?

ifstream Holes;

потом открываю:

ifstream.open Holes; // ?

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

Кроме того, как только я прочитал файл данных, каков правильный синтаксис для помещения данных в массивы?

Могу ли я просто объявить массив, например. T[N] и cin fstream объект Holes в него?


person lprater1    schedule 24.11.2011    source источник
comment
Возможно, посмотрите учебник, подобный этому: cplusplus.com/doc/tutorial/files и задайте нам любые конкретные вопросы, которые могут у вас возникнуть.   -  person JoeFish    schedule 24.11.2011
comment
По одному вопросу, пожалуйста!   -  person Kerrek SB    schedule 24.11.2011
comment
@JoeFish: Этот учебник - чушь. Не используйте его. Остерегайтесь сайта cplusplus.com.   -  person Kerrek SB    schedule 24.11.2011
comment
@KerrekSB Достаточно честно. Ссылка на лучшую?   -  person JoeFish    schedule 24.11.2011
comment
@JoeFish: Я на самом деле немного поискал, прежде чем публиковать, ошибочно думая, что уже должна быть хорошая ссылка. К сожалению, все, что я нашел, было Total Garbage (например, MSDN), полным вводящих в заблуждение советов и неправильных циклов. На данный момент я бы рекомендовал этот ответ :-)   -  person Kerrek SB    schedule 24.11.2011
comment
@KerrekSB: +1 за ссылку на себя :)   -  person JoeFish    schedule 24.11.2011


Ответы (2)


Основное ifstream использование:

#include <fstream>   // for std::ifstream
#include <iostream>  // for std::cout
#include <string>    // for std::string and std::getline

int main()
{
    std::ifstream infile("thefile.txt");  // construct object and open file
    std::string line;

    if (!infile) { std::cerr << "Error opening file!\n"; return 1; }

    while (std::getline(infile, line))
    {
        std::cout << "The file said, '" << line << "'.\n";
    }
}

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

#include <sstream>   // for std::istringstream

// ... as before

    while (std::getline(infile, line))
    {
        std::istringstream iss(line);
        double a, b, c;

        if (!(iss >> a >> b >> c))
        {
            std::cerr << "Invalid line, skipping.\n";
            continue;
        }

        std::cout << "We obtained three values [" << a << ", " << b << ", " << c << "].\n";
    }
person Kerrek SB    schedule 24.11.2011

Позвольте мне пройти через каждую часть чтения файла.

#include <fstream> // this imports the library that includes both ifstream (input file stream), and ofstream (output file stream

ifstream Holes; // this sets up a variable named Holes of type ifstream (input file stream)

Holes.open("myFile.txt"); // this opens the file myFile.txt and you can now access the data with the variable Holes

string input;// variable to hold input data

Holes>>input; //You can now use the variable Holes much like you use the variable cin. 

Holes.close();// close the file when you are done

Обратите внимание, что этот пример не касается обнаружения ошибок.

person Boundless    schedule 24.11.2011