2014-06-17 3 views
1

텍스트 파일 이름이 있습니다. 텍스트 파일을 스트림으로 읽어 콘솔에 표시하고 싶습니다. 완료되면 사용자에게 이름을 입력하라는 메시지가 표시됩니다. 그런 다음 파일에 추가해야합니다.콘솔에 텍스트 파일을 읽은 다음 텍스트 파일을 추가하십시오.

이 두 가지를 따로 수행 할 수는 있지만 함께 사용할 수는 없습니다. 내 코드는 다음과 같습니다. 내가 거기에있는 동안 루프를두면

#include "stdafx.h" 
#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <string> 

using namespace std; 
using namespace System; 

int main(array<System::String ^> ^args) 
{ 
fstream myfile; 
string line; 
string name; 
    myfile.open("Names.txt",ios::out | ios::in | ios_base::app); 
    if (myfile.is_open()) 
    { 
     while(getline(myfile, line)) 
     { 
      cout << line << endl; 
     } 
    cout << "Enter your name!\n"; 
    getline (cin, name); 
    myfile << name; 
    myfile.close(); 
} 
else 
{ 
    cout << "file was not opened\n"; 
} 

    return 0; 
} 

, 그것은 콘솔에 모든 이름을 기록하지만, 목록에 사용자가 입력 한 이름을 추가하지 않습니다. while 루프를 꺼내면 파일에 이름을 추가 할 수 있지만 물론 그 파일에 이미있는 이름 목록을 얻지는 못합니다.

가장 좋은 추측은 getline을 사용하여 파일을 루프 한 후에 위치가 스트림의 끝에 있다는 사실과 관련이 있다고 생각합니다. 따라서 이름을 추가하려고 할 때 스트림에 남아있는 공간이 없습니다.

+2

C++를'배열 ^args)'?!? – trojanfoe

+0

Visual Studio를 사용 중입니다. 프로젝트 유형 CLR Console App를 선택했습니다. 그것은 나를 위해 공급되었습니다. – Brandon

+1

그것은 관리 C++입니다 ... – Scis

답변

6

맞춰보세요.

마지막으로 getline() (오류가 발생한 것)을 호출하면 스트림에 오류 플래그가 설정되어 더 이상의 IO 시도가 실패하므로 파일에 실제로 아무 것도 기록되지 않습니다.

당신은 당신의 독서 루프 후 errors flags withclear()를 재설정 할 수 있습니다

myfile.clear(); 

참고 :

또한 마지막 getline() 호출의 반환 값을 테스트해야합니다.

+0

정말 고마워! 수정 사항이 간단 할 때 좋습니다. – Brandon

0

그냥이 문제에 부딪 여기에 답이 허용됩니다 비록 내가 하나가 표준 C++ 파일 읽기 루프를 사용하는 방법을 보여줍니다 전체 코드를 사용 할 수 있다고 생각 : 아니다

#include "stdafx.h" 
#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <string> 

using namespace std; 
using namespace System; 

int main(array<System::String ^> ^args) 
{ 
fstream myfile; 
string line; 
string name; 
    myfile.open("Names.txt",ios::out | ios::in | ios_base::app); 
    if (myfile.is_open()) 
    { 
     while(getline(myfile, line)) 
      cout << line << endl; 
     if (file_list.eof()) 
      file_list.clear(); //otherwise we can't do any further I/O 
     else if (file_list.bad()) { 
      std::cout << "Error occured while reading file"; 
      return 1; 
    } 
    cout << "Enter your name!\n"; 
    getline (cin, name); 
    myfile << name; 
    myfile.close(); 
} 
else 
{ 
    cout << "file was not opened\n"; 
} 

    return 0; 
} 
관련 문제