2013-11-02 2 views
0

나는 바닥에 while 루프 동안 파일이 저장되지 않았거나하지

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 (SOLUTION) :

실레 Starynkevitch에서 주로 위의 주어진 정보의 일부를 사용한 후, 나는 할 수 있었다 (나는 아직 찬성 투표 할 수 없기 때문에 여기를 넣어) 코드를 작동 시키려면!

나는 또한 내 책에서 약간의 연구를했고 비슷한 프로그램의 스타일을 복사했다. 어디에서 코드의 일부분을 넣을 수 있는지, 그리고 나서 입력이 작동합니다. 나는 출력을 위해 계속했고 핵심 부분은 출력을 위해 파일을 열 때 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

모든 경고 (예 :'g ++ -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::flushticketFile에 있어야합니다.

+0

Hrmm 나는 test.txt 파일이 비어있는 것처럼 보이기 때문에 문제는 파일을 쓰는 것이라고 생각합니다. – xCasper

+0

배우기 위해이 작업을 시도하고 있습니다. 장 프로젝트입니다. 또한 당신이'ofstream 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

관련 문제