2012-03-21 7 views
0

프로그램이 파일을 읽고 파일에서 문자를 가져온 후 다른 파일을 읽으려는 경우 사용자에게 묻습니다. 사용자가 예라고 말하면 프로그램은 파일 이름을 묻습니다. 그러나 자동으로 파일을 열 수 없으며 루프를 종료합니다. 도와주세요. 여기 첫 번째 파일 이후에 C++ 후속 파일이 열리지 않음

코드입니다 :

do //do while opening the source file fails 
     { 
     cout << "Enter filename of source file: "; 
     cin.getline (filename,51); 
     sourceFile.open(filename); //opens the file with given filename 
     if (sourceFile.fail()) 
      cout << "File could not be opened" << endl; //error if can't open 
     sourceFile.clear(); 
     } 
     while (sourceFile.fail()); //exits if source file doesn't fail 
+1

당신은 디버거를 시도 했습니까? 열려고 시도한 파일 이름이 의미가 있었습니까? –

+0

좋은 디버거 란 무엇입니까? –

+1

어떤 오류가 발생합니까? 어떤 시스템을 실행하고 있습니까? 'gdb'는 널리 사용되는 디버거이지만 사용하는 시스템은 사용중인 시스템에 따라 다릅니다. –

답변

1

이 테스트 :

while (sourceFile.fail()) 

당신이 거기에 도착하기 바로 전에 당신이 호출하기 때문에 사실이 없을 것 :

sourceFile.clear() 

어떤을 취소 할 스트림에 대한 iostate의 문제 비트.

나는 단지 clear()에 대한 호출을 제거하고 싶다고 생각합니다.

+0

잘 작동합니다. 첫 번째 파일이 정상적으로 실행되기 때문에 잘 작동합니다. while loop while while do do this while –

+0

@TylerGavin : 오픈이 실패하면 파일 이름을 다시 묻는 데 문제가 없다고 생각했습니다. –

+0

@TylerGavin : 나는 지금 내가 생각하기에 - 나는이 대답에서 내가 가진 것이 코드에서 문제라고 생각한다. (만약 오픈이 실패하면, 다시 시도 할 기회가 없다. 이것은 루프의 의도라고 생각한다.)). 그러나 arminb의 의견에 의해 즉각적인 문제가 해결되는 것 같습니다. –

0

실패 파일을 여는 std::basic_ios::operator !() 사용하는 것입니다 여부를 확인하는 정식 방법 :

do 
{ 
    cout << "Enter filename of source file: "; 
    std::getline(std::cin, filename); 
    sourceFile.open(filename.c_str()); 
    if (!sourceFile) 
    { 
     cout << "File could not be opened" << endl; 
    } 
} 
while (!sourceFile);