2017-03-14 1 views
0

이 질문에 대한 질문에 대해 미리 사과드립니다. 정말 고심하고 있습니다. private 멤버 x와 y, 멤버 함수 getX, getY, setX, setY, read 및 write를 사용하여 C++에서 Point라는 클래스를 작성했습니다. 나는 입출력 파일이 끔찍하기 때문에 읽고 쓰는 것 외에는 모든 것을 할 수있었습니다. 나는 읽기 및 쓰기에 대한 다음과 같은 선언이 있습니다C++ : txt 파일에서 읽고 쓰는 멤버 함수

void read(istream& ins); 
void write(ostream& outs); 

읽기 다음과 같이 RME는 다음과 같은 점을 주문 걸립니다

* Requires: outs is in good state. 
* Modifies: outs. 
* Effects: Writes point in form (x,y). 

은 '읽기'

* Requires: ins is in good state. 
* Modifies: ins, x, y. 
* Effects: Reads point in form (x,y) 

및 쓰기에 대한 주어진 파일 "data1.txt"로부터 (1, 5), (2, 7) 등을 추출하고 x와 y 성분을 추출합니다 (적어도, 나는 이것이 무엇을해야하는지 믿습니다). 읽기 용 테스트 세트가 제공되었습니다.

void test_point() { 
Point pt1; 

pt1.setX(15); 

cout << "pt1 is: " << pt1 << endl; 

ifstream input_file; 
input_file.open("data1.txt"); 
pt1.read(input_file); 
cout << "pt1 is: " << pt1 << endl; 

return;} 

읽기 기능을 작성하는 방법을 알지 못합니다. 나는 문자 a, b, c 및 정수 U, V를 정의했는데, 실행 한 :

ins >> a >> u >> b >> v >> c; 

하지만, 작동하지 않았다. 누군가가 나를 구현하는 방법을 볼 수 있도록 도와 주시겠습니까?

+0

'ins >> x >> y; ' –

+0

@ MaximEgorushkin은 텍스트 파일의 순서쌍이 (x, y)로 작성된 경우이 작업을 수행합니까? 괄호와 쉼표는 어떻게됩니까? – infinitylord

+0

또한 주문 된 포인트 중 하나를 어떻게 더 읽어야합니까? 일단 내가 쓰면 읽기 기능을 살펴볼 것인가? – infinitylord

답변

0

당신의 질문에서 빠진 몇 가지 사항은이 클래스를 사용하면 실행 가능해야한다는 것입니다. 하나는 정렬 된 점의 파일을 읽는 것이 멤버 함수로 구현되어서는 안됩니다. 어떤 경우에는 같은 루프를 사용할 수 있습니다

while(input_file) { 
     // set a point to have members x, y that were read from file 
     // store this point in a vector of points 
    } 

그렇지 않으면 당신이 파일에서 읽은 점의 무리를 저장하는 합리적인 방법이 없습니다.

이 확실히 작동합니다 읽기 함수 내 솔루션에 대한 귀하의 생각 (문자를 A, B, C를 가정하고, int 치의 U, V) : 사실

input_stream >> a >> u >> b >> v >> c; 

, 당신이 우리에게 준 형식 (ifstream을 인자로 취함), 실제로는 read 함수에서 그다지 많이 쓰일 필요가 없습니다. 왜냐하면 그것은 객체를 변형시키고 아무 것도 반환 할 필요가 없기 때문입니다. 구현은 구조화 된 파일에서 이러한 "레코드"를 구문 분석하는 가장 간단한 방법입니다.

모두 읽은 후에는 호출자 개체의 x 좌표를 u로 설정하고 y를 v로 설정합니다. 이것은 void 함수 여야하며 반환 할 필요는 없지만 현재있는 Point 개체를 변경해야합니다 를 요구했다. 이 멤버 함수는 내가 언급 한 루프에서 임시 점 개체에서 호출되어야하며, 다음과 같은 점의 벡터에 객체를 추가 : 사실 여러 포인트를 읽을 수 있어야합니다

vector<Point> points; 
    while(...) { 
     // declare Point 
     // initialize with values from read 
     points.push_back(//the point you just created); 
    } 

합니다.

  1. 은 ifstream은 아직 언급하지 않았다 모두의 첫번째 실제로 좋은 있는지 확인하기 위해 (그러나 이것은 요구 사항 중 하나입니다) :

    요약하면, 당신의 읽기 기능은 필요

    if (!input_file) { //however you want to handle this error } 
    
  2. 임시 char 및 int 변수 (버퍼로 사용됨)를 읽을 수 있습니다. (그런데 u 및 v를 읽고 복사하는 대신 x 및 y로 곧바로 읽을 수 있습니다.

  3. x 및 y로 바로 읽을 수 없도록 선택한 경우 u 및 v 값을 x 및 y로 지정해야합니다. 이제 당신의 물건이 완성되었습니다. 대신에 표준의 쓰기 기능에 관해서는

:: 당신이 write 함수에 인수로 전달 된 ofstream의 이름을 사용하고, 표시 한 형식의 레코드를 작성합니다 COUT. 이것은 출력이 텍스트 파일에있는 경우를 제외하고 콘솔로 인쇄하는 것과 다릅니다 (본질적으로).

참고 : iostream 개체 (istream, ostream)와 fstream (ifstream, ofstream, fstream) 개체의 차이점을 알고 있어야합니다.

관련 문제