2013-10-11 2 views
0

파일에 쓰는 데 문제가 있습니다. 공백 문자를 쓰면 각 단어를 한 줄로 씁니다. 왜?공백이있는 파일의 문자열 쓰기

void backstart() 
{ 
    thread t1(backing); 
    thread t2(thr2); 
    t1.join(); 
    t2.join(); 
} 

void thr2() 
{ 
    string tmp; 
    tmp = ""; 
    while (tmp != "/exit") 
    { 
     cin >> tmp; 
     if (tmp != "/exit") 
     { 
      writefile(tmp); 
     } 
    } 
    runing = false; 
} 

void writefile(string msg) 
{ 
    ofstream myfile("file.txt", ios::out | ios::app); 
    myfile << userna + ": " + msg + ",\n"; 
    myfile.close(); 
} 

감사 데이먼

+2

'cin >> tmp'는 공백으로 분리됩니다. 어쩌면 ['getline'] (http://en.cppreference.com/w/cpp/string/basic_string/getline)을보십시오. – BoBTFish

+0

감사합니다. 그것은 정말로 빠르다! 이제 완벽하게 실행 중입니다! 나는 C++에서 새롭기 때문에 저것을 몰랐습니다. ^^ –

+0

문제 없습니다. 나는 내 대답에 전체 읽기 루프를 철자했다. 추측과 무작위 검색으로 배우려고하지 않는 것이 좋습니다. 당신은 많은 잘못된 것들과 나쁜 습관을 배울 것입니다. 어쩌면 [좋은 책] (http://stackoverflow.com/q/388242/1171191)을 사용해보십시오. – BoBTFish

답변

0

이처럼 작성을 고려해보십시오

void thr2() 
{ 
    std::string line; 
    while(std::getline(cin, line)) // this check the read succeeded as well 
    { 
     if (line=="/exit") break; // stop on "/exit" command 
     writefile(line); // write out the line 
    } 
    running = false; // stop the thread, I guess 
} 

가장 중요한 라인은 std::string로 한 번에 전체 라인을 읽고

while(std::getline(std::cin, line)) 

입니다 line, 그리고 스트림의 상태를 검사하여 읽음이 성공했는지 확인하십시오.. std::getline here에 대해 읽어보십시오.

편집 :

>>getline와 읽기 혼합 매우주의 (사실 난 그냥 그것을 피하는 것이 좋습니다). 예를 들어 int을 읽는 경우 >>으로 끝나면 '\n' 문자가 남게됩니다. 따라서 다음에 getline으로 읽을 때 나머지 (기본적으로는 아무 것도 아님)이 표시됩니다. 당신이 원했던 것, 다음 라인입니다.

방금 ​​>>으로 읽었으며 getline을 사용하려는 경우 공백 공백 문자를 먼저 읽으십시오 (예 : std::cin >> std::ws).

+0

끝 부분에서도 편집 내용을 읽으십시오. – BoBTFish

관련 문제