2016-09-22 5 views
-5

나는 다음과 같은 텍스트 .txt 파일을 읽으려고되었습니다.txt 파일을 char 배열로 변환 하시겠습니까?

디버깅 하드 첫번째 장소에있는 코드를 작성하는 두 배입니다. 따라서 코드를 가능한 한 영리하게 작성하면 정의에 따라 디버깅 할만큼 똑똑하지 않습니다. - Brian W. Kernighan *

그러나 char 배열로 .txt 파일을 보내려고하면 "디버깅"이라는 단어를 제외하고 전체 메시지가 인쇄됩니다. 이유는 확실하지 않습니다. 여기 내 코드가있다. 내가 볼 수없는 단순한 것이어야합니다. 어떤 도움이라도 대단히 감사 할 것입니다.

#include <iostream> 
#include <fstream> 

using namespace std; 

int main(){ 

char quote[300]; 

ifstream File; 

File.open("lab4data.txt"); 

File >> quote; 


File.get(quote, 300, '*'); 


cout << quote << endl; 
} 
+0

이 코드는 이해되지 않는 등을 포함한다. 당신이 실제로하고 싶은 것을 설명하기 위해 질문을 향상 시키시기 바랍니다. –

+0

'File >> quote;를 제거하십시오. 첫 번째 단어가 배열에 쓰여지고'File.get' 호출에 의해 덮어 쓰여질 때입니다. –

+0

고마워요. 고쳐 줬습니다. – Joe

답변

0

라인

File >> quote; 

은 배열에 첫 번째 단어를 읽습니다. 그런 다음 File.get으로 전화하면 이미 읽은 단어가 복사됩니다. 그래서 첫 단어는 사라졌습니다.

코드에서 위의 행을 제거해야 올바르게 작동합니다.

보통 문자 배열 대신 std::string을 사용하여 읽을 것을 권하고 싶지만, ifstream::get은 지원하지 않습니다. 가장 가까운 값은 streambuf입니다.

다른 주목할 점은 파일이 올바르게 열 었는지 확인하는 것입니다.

다음 코드는 그렇게합니다.

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main(){ 

    char quote[300]; 
    ifstream file("kernighan.txt"); 

    if(file) 
    { 
     file.get(quote, 300, '*'); 
     cout << quote << '\n'; 
    } else 
    { 
     cout << "file could not be opened\n"; 
    }  
} 

ifstream 객체 (03 세계 C++ 또는 void*) bool로 전환 등 truthiness에 대해 테스트 할 수 있습니다.

0

(되지 테스트) 문자의 판독 방법에 의해 간단한 숯불

의도적 의사 코드로 판독하더라도
#include <fstream> 

using namespace std; 

int main() 
{ 
    char quote[300]; 
    ifstream File; 
    File.open("lab4data.txt"); 
    if(File) 
    { 
     int i = 0; 
     char c; 
     while(!File.eof()) 
     { 
      File.read(&c,sizeof(char)); 
      quote[i++] =c; 
     } 
     quote[i]='\0';   
     cout << quote << endl; 
     File.close(); 
    } 

}

관련 문제