2016-04-18 3 views
0

У меня возникли проблемы с пониманием того, почему моя программа не имеет выхода. Может ли кто-нибудь указать правило, которое я пропускаю? Как вы можете видеть, я читаю файл в классе и получаю доступ к тем же функциям печати классов через публичный доступ к подклассу.ifstream variable loop ничего не печатает

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

class mainClass 
{ 
public: 
    void print(); 
    void read(); 
    std::ifstream dataFile; 

protected: 
    double first, second; 
    std::string mainString; 
    bool truth; 
}; 

void mainClass::read() 
{ 
    dataFile.open("data.txt"); 
} 

void mainClass::print() 
{ 
    while (dataFile >> mainString >> first >> second >> truth) 
    { 
     std::cout << mainString << first << second << truth; 
    } 
} 

int main() 
{ 
    mainClass instance; 
    instance.read(); 
    instance.print(); 
    return 0; 
} 

data.txt:

Pie 3.14515 69 true 
Apple 4.234 42 true 
Potato 5 4.532 false 
Carrot 55 1.2204 true 
Corn 7.53221 12 false 
+1

Вы можете разделить содержание 'data.txt'? – Mureinik

+0

Я отредактировал вопрос и добавил его. – Lloyd

ответ

0

Для чтения булевых значений из текста, как это, вы должны использовать I/O манипулятором std::boolalpha. , например.:

dataFile >> std::boolalpha; 
while (dataFile >> mainString >> first >> second >> truth) 
{ 
    std::cout << mainString << first << second << std::boolalpha << truth; 
} 

Ссылка для std::boolalpha: http://en.cppreference.com/w/cpp/io/manip/boolalpha

1

Ваш оператор чтения dataFile >> mainString >> first >> second >> truth всегда терпят неудачу, потому что он не может читать булевы значения «истина/ложь». Вы должны использовать модификатор std::boolalpha, если вы хотите, чтобы читать логические значения в качестве текста

dataFile >> mainString >> first >> second >> std::boolalpha >> truth;