2013-11-02 4 views
0

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

std::cout << line; 

ничего не печатает.

Я считаю, что файл test.txt на самом деле не записывается, потому что, когда я открываю test.txt в своей папке, его пустой. Есть предположения?

void Ticket::WriteTicket() 
{ 
    std::string ticketInput; 
    std::ofstream ticketFile("test.txt"); 

    ticketFile.open("test.txt"); 
    std::cout << "Please Enter Ticket Information: " << std::endl; 
    getline(std::cin, ticketInput); 

    std::cout << ticketInput << std::endl; //does print out the line 
    ticketFile << ticketInput; 
    ticketFile.close(); 

    //here for testing only 
    std::string line; 
    std::ifstream ticketRead("test.txt"); 

    while(getline(ticketRead, line)); 
    { 
     std::cout << "something here?: " << line; // there is nothing here when it outputs 
    } 
} 

EDIT (РАСТВОР):

После использования некоторых из информации, которая была дана выше, в основном из Basile Starynkevitch (я положил это здесь, потому что я еще не могу upvote), я был в состоянии чтобы код работал!

Я также сделал некоторые исследования в своей книге и скопировал стиль подобной программы. Ака, где поставить какую часть кода, а затем работать. Я продолжал с выходом, а ключевой частью был std::ifstream::in в открытии файла для вывода.

void Ticket::WriteTicket() 
{ 
    std::string ticketInput; 

    std::cout << "Please Enter Ticket Information: " << std::endl; 
    getline(std::cin, ticketInput); 

    std::ofstream ticketFile("Ticket.txt"); 

    ticketFile << ticketInput << std::endl; 

    ticketFile.close(); 

    //here for testing 
    std::ifstream ticketRead; 
    ticketRead.open("Ticket.txt", std::ifstream::in); 
    std::string line; 

    while(getline(ticketRead, line)) 
    { 
     std::cout << line << std::endl; 
    } 
}  

Благодарим за помощь всем!

+2

Пожалуйста компилировать все предупреждения (например, 'г ++ -Wall') и научиться использовать отладчик (например,' gdb'). –

+0

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

+0

Пенсионер Ниндзя, я не понимаю, что вы имеете в виду? – xCasper

ответ

0

C++ I/O буферизуется. По крайней мере, код

std::cout << "something here?: " << line << std::flush; 

, но в вашем случае

std::cout << "something here?: " << line << std::endl; 

будет лучше.

Также

std::ofstream ticketFile("test.txt") 

, вероятно, следует

std::ofstream ticketFile("test.txt", std::ios_base::out); 

я настоятельно рекомендую принимать несколько часов, чтобы прочитать больше о C++ libraries перед кодированием. Проверьте каждую функцию или класс, который вы используете. Конечно, вам также нужно std::flush по телефону ticketFile.

+0

Hrmm Я думаю, что проблема заключается в написании файла, потому что в любом случае файл test.txt кажется пустым. – xCasper

+0

Я пытаюсь сделать это, чтобы узнать, это проект главы. Кроме того, я попытался добавить то, что вы сказали 'outstream ticketFile (" test.txt ", std :: ios_base :: out);' ничего не изменило – xCasper

+0

Не закрывает выполнение неявного флеша? –

2

Необходимо очистить выходной буфер.

ticketFile << ticketInput; 

должен быть

ticketFile << ticketInput << std::endl; 

std::endl промывает выход buffer.See std::flush, если вы не хотите новую линию.

+0

Я попытался сделать это, и я все еще не вижу текста в test.txt, если я его открываю, и он все равно ничего не выводит во время инструкции while. – xCasper

+0

Я скопировал и вставил ваш код, сделал вышеуказанное изменение, и он сработал. Убедитесь, что вы не внесли никаких изменений в дополнение, пытаясь исправить это. :-) – OMGtechy

-1

Возможно, файл необходимо открыть в режиме записи. Попробуйте std::ofstream ticketFile("test.txt","w");

+0

'std :: ofstream ticketFile (" test.txt "," w ");' не компилируется :( – xCasper

+0

Затем попробуйте вместо этого «w +». – flyingfoxlee

Смежные вопросы