2012-09-25 3 views
-1

이름에 공백이있는 C++ 파일을 여는 데 문제가 있습니다. 예를 들어 파일 read me.txt을 여는 경우이름에 공백이있는 파일 열기

string choice, word, fname; 
ifstream input; 
int l, count = 0; 

if(choice == "wc" || choice == "WC" || choice == "Wc") 
{ 
    getline(cin, fname); 
    input.open(fname.c_str()); 
    cout << fname << endl; 
    if(input.fail()) 
    { 
     cerr << " Error: failed to open the file: " << fname << endl; 
     input.clear(); 
    } 
    else 
    { 
     w = 0; 
     while (input >> word) 
      w++; 
     input.close(); 
     count = w; 
     cout << fname << " has a Word Count of: " << count << " words \n" << endl; 
    } 
} 

내가 스트림 기능 c_str()이 후 하나 이상의 문자열을 읽을 수 있다는 사실을 알고 :

내가 지금까지 파일을 읽고 단어가 콘솔에 계산 출력 하나의 명령을 포함하는 한 코드입니다 공간. 하위 문자열을 사용하려고 생각했지만 계속 진행하는 방법에 대해 완전히 확신하지 못했습니다. 너희들이 나를 도와 줄 수 있니? '\'문자가 이스케이프 코드로 해석됩니다

리터럴 문자열에서

에 당신을 허용 :

+3

'c_str()'은 공백을 신경 쓰지 않습니다 ... 여기서 뭐가 문제입니까? – Cornstalks

+0

코드에 컴파일 (예 : 마지막 줄에서'cout' 대신'out', 어디에도'w'가 정의되어 있지 않음)을 방지하는 몇 가지 명백한 (?) 오류가 있습니다. 작업 코드를 입력하십시오. 내가 아는 최선의 방법으로 코드를 수정하면, 파일 이름에 공백이있는 것처럼 처리됩니다. –

+0

디버깅은 어때요 ...''cout << ""[ "<< fname <<"]을 열려고합니다. \ n ";'알다시피, 당신의 문자열은 당신이 생각하는 것입니다. – paddy

답변

0

당신은이 (http://www.cplusplus.com/forum/beginner/39687/)를 시도 않았다 그렇지 않으면 입력 할 수 없거나 인쇄 할 수없는 문자를 포함시킵니다. 예를 들어 리터럴 문자열에 줄 바꿈을 포함 시키려면 리터럴 문자열을 입력하는 동안 Enter 키를 누를 수 없습니다. 실제로 편집기가 새 줄을 시작하여 응답 할 것이기 때문입니다. 그래서 대신 "\ n"을 입력하십시오 (예 : "이것은 첫 줄에 있습니다 \ n 두 번째 줄에 있습니다"). '\'문자를 입력하려면 두 개의 슬래시를 입력하여 이스케이프해야합니다. 첫 번째 슬래시는 이스케이프 문자이고 두 번째 슬래시는 포함 된 슬래시 문자입니다.

예 : C : \ 프로그램 파일 \

편집 파일 이름 .txt : 사용자는 이스케이프 문자 바로 파일 이름을 입력하지 않습니다. 그런 다음 프로그램은 공백과 경로를 역 슬래시로 처리해야합니다. \ n 새로운 줄을 지정하지만 이스케이프 문자와 n 문자로 구성됩니다.

+0

getline에 대한 응답으로 텍스트를 입력 할 때, 사용자는 확실히 문자열을 이스케이프 할 필요가 없습니다. 아니면 내가 너를 오해 한 것일까? 답을 편집한다면''\ n ''과'endl'은 다소 중복된다는 것을 주목할 필요가 있습니다. – Cornstalks

+0

죄송합니다. 내 코드의 해당 섹션을 복사하여 붙여 넣었지만 어떻게 든 cout의 c가 표시되지 않았습니다. 그리고 거기에 내가 cout << fname;을 입력했을 때 약간의 디버깅이 있습니다. 내 질문은 내가 fname.c_str(); 공백으로 파일을 열 수 없습니다. 예 : 바람 부는 중 ..txt 열 수 없습니다 ... – user1696197