2013-07-30 3 views
0

텍스트 파일에서 읽는 기본 계산기를 만들어야합니다.파일 입력 C++ 행이 변경되는 경우

2 
add 5 3 
sub_prev 1 
1 
mul 4 5 

2 개의 조작의 수를 나타냅니다, 분명히 수단 (5) + 6을 추가하고, 계산기는 이전의 결과를 유지, 당신이 + 할 수 있도록 - */그것은 다음과 같이 파일 포맷됩니다. 따라서 2 개의 연산이 있다는 의미입니다 : 5 + 3을 더한 다음 이전 결과에서 1을 뺍니다. 기타.

파일 열기가 잘되었지만 올바르게 읽을 수있는 방법을 알 수 없습니다. 이상적으로, 그것은 첫 번째 정수를 읽고, 다음 라인 수를 읽고, 연산을 수행하는 루프를 입력합니다. for 루프가 첫 번째 작업 횟수만큼 완료된 후에도 while 루프를 읽는 동안 여전히 파일에 있지만 for 루프를 다시 입력하고 더 많은 작업을 읽고 계산합니다.

샘플 코드

문제가 결코 for 루프를 입력하고 싶어한다는 것입니다

, 그것은 작업의 더 (수 2없는 것을 읽을 수 있지만 그것은 오히려에가는 것보다 while 루프를 통해 계속

while(myfile) // while reading the file 
{ 
    int PR = 0; //initialize the previous result as 0 
    myfile >> no; // grabbing the number of operations 
    cout << no << endl; // testing to see if it got it correct 

    for (int i = 1; i <= no; i++) // for the number of operations 
    { 
     myfile >> no >> op >> x >> y; // read the lines 
     if (op == "add") //there would be an if for each operation 
     { 
      PR = x + y; 
     } 
    } 

    myfile >> no >> op >> x >> y; 
} 
루프

** 업데이트 된 코드 ** 잘못된

while(myfile) // while reading the file 
{ 
    int PR = 0; //initialize the previous result as 0 
    myfile >> no; // grabbing the number of operations 


    for (int i = 1; i <= no; i++) // for the number of operations 
    { 
    myfile >> op; 
    if (op == "add") 
    { 
    myfile >> x >> y; 
    PR = x + y; 
    }  

    if (op == "sub_prev") 
    { 
     myfile >> x; 
     PR = PR - x; 
    } 

    if (op == "mul") 
    { 
     myfile >> x >> y; 
     PR = x * y; 
     //cout << x << y << PR << endl; //testing mul operation 
    } 

    } 

    cout << "The result of operation " << " is " << PR << endl; 


} 
제대로 계산

하지만, 출력 :

Enter file name: newfile.txt 
The result of operation is 7 
The result of operation is 20 
The result of operation is 20 

RUN SUCCESSFUL (total time: 3s) 
+7

우리가 정확히 무엇을하고 있는지 알 수 있도록 코드를 작성할 수 있습니까? 지금까지 가지고있는 것을 보여주십시오. –

+0

그걸 입력하지 않았다는 것을 어떻게 알 수 있습니까? 어떻게 확인하니? 나는 문자열에 대한 >> 동작을 모른다. 그래서 아마도 fscanf를 사용했을 것이다. – wendelbsilva

+0

for 루프에 cout 문을 넣었습니다. 아무 것도 출력하지 않았습니다. –

답변

2

당신은 당신이 그렇게 안 여기

myfile >> no >> op >> x >> y; 

no을 수정. for 루프의 본문으로 다음과 같이 제안 할 것입니다 :

std::string operation; 
myfile >> operation; 
if (operation == "add") { 
    int a, b; 
    myfile >> a >> b; 
    PR = x + y; 
} else if (operation == "sub_prev") { 
    int value; 
    myfile >> value; 
    // do something 
} else { 
    // for other operations if added in future 
} 
+0

좋아, 나는 이것이 내가 갈 필요가있는 길이라고 생각한다. 기본적으로 2 vars (add 등) vs 1 (add_prev, sub_prev 등)이있는 줄을 처리하는 방법 –

+0

그래서 내 프로그램은 파일 (7과 20)에 대한 값을 올바르게 계산하지만 루프는 두 번째 파일 입력은 한 번만 실행해야합니다. 작업 수를 출력하면 값 no가 하나로 업데이트되지만 for 루프는 여전히 두 번 실행됩니다. –

+0

코드를 게시 할 수 있습니까? 질문에 –