2014-02-11 2 views
0

텍스트 문서에 내용을 쓰고 단어를 추출한 다음 인쇄하려고합니다.하지만 그럴 경우 제외 할 단어를 인쇄합니다. 첫 번째 단어, 그럼 무한히 "\ 377"밖으로 인쇄 시작이 제대로 닫지 않는 파일과 관련이 있다고 생각하지만 제대로 닫는 방법을 모르겠다, 내 자기 C + +를 가르치고 난 그냥이 물건을 발견 내 자신의하지만이 날 혼란스러워했다. 나는 문자 문서에 S, D, T라는 글자를 쓰려고 시도하고있다. 그런 다음 그 글자들을 각각 문자열로 저장하여 출력한다.C++ 텍스트 파일을 읽는 중, 377이 무한히 인쇄되기 시작합니다.

// 
// main.cpp 
// test prep 
// 
// Created by Sylvain Jones on 2/10/14. 
// 

#include <iostream> 
#include <fstream> 

using namespace std; 

void makeFile() { 
fstream outfile("file.txt", fstream::out); 
outfile << "S S D T 0"; 
outfile.close(); 
} 

void readFile() { 
    ifstream file; 
    file.open("file.txt"); 
    string word; 
    char x ; 
    word.clear(); 
    int score, runners = 0; 
    int srunners[100]; 

    while (file >> word) { 
     x = file.get(); 
     while (x != 0) { 
      word = word + x; 
      x = file.get(); 
      cout << x << endl; 
      if (x == ' ') { 
      if (word == "S") { 
       score = score + 1; 
       runners++; 
       srunners[runners] += 1; 
      } 
      else { 
       if (word == "D") { 
        score = score + 2; 
        runners++; 
        srunners[runners] += 2; 
       } 
       else { 
        if (word == "T") { 
         score = score + 3; 
         runners++; 
         srunners[runners] += 3; 
        } 
       } 
      } 
     } 
    } 
} 
} 

int main(int argc, const char * argv[]) 
{ 
makeFile(); 
cout << "file made\n\n"; 
readFile(); 
} 
+3

파일의 끝에 도달하면'file.get()'이 반환하는 것은 무엇이라고 생각하십니까? – Barmar

+1

"저작권 (c) 2014 실뱅 존스. 판권 소유." SO에 게시 된 코드에 대해서는 부적절합니다. 모든 SO 콘텐츠는 CC 라이선스가 있어야하며 다른 콘텐츠가 게시되지 않도록하는 것은 사용자의 몫입니다. 이 페이지까지 스크롤하여 자세한 내용에 대한 링크가있는 "기여가 필요한 cc by-sa 3.0 라이선스가있는 사용자 기여도"를 참조하십시오. – hvd

+0

xcode를 사용하면 자동으로 거기에 넣습니다. –

답변

-1

난`는 확실하지에 대한

while (file >> word) 

은 아마 당신은

while (!file.eof()) 
+0

왜 이것이 나쁜 대답인지 http://stackoverflow.com/questions/5837639/eof-bad-practice를 참조하십시오. – hvd

+0

아직 작동하지 않았지만 여전히 377s –

0

가 적어 둡니다 사용해야합니다.

은 문자가 아닌 정수를 반환합니다.

확인 문서 http://www.cplusplus.com/reference/istream/istream/get/

그래서 항상 확인 -1 파일 읽기를 중단하는 두 번째 ReadFile을 방법의 루프는

while ((x = file.get()) != EOF){ 

} 

EOF는 -1

로 정의 아래처럼해야한다 동안
관련 문제