2013-01-10 4 views
0

아래와 같은 코드가 있습니다. temps = $Nodes 루프가 종료되어야합니다. 반복에서 매번 temps을 확인하고 예상대로 temps = $Nodes을 보았지만 루프가 종료되지 않았습니다. 이 코드는 VS10에서 작동했지만 Linux에서는 작동하지 않습니다. 어떤 생각?문자열 비교가 작동하지 않습니다.

std::string temps; 
s_mesh_file.open (mesh_file.c_str()); 

do 
{ 
    getline (s_mesh_file, temps); 
    std::cout << "temps: " << temps << std::endl; 
    std::cin.ignore(); 
} 
while (temps != "$Nodes"); 
+3

아마도 'temps' 끝에 끝에 공백이 몇 개 포함될 수 있습니까? 그래서 당신은 "$ Nodes"를 보았습니다 만 실제로는 "$ Nodes"입니다. –

+4

동일한 입력 파일을 사용하고 있습니까? Windows 개행 문자 포함? 리눅스는 윈도우 뉴 라인을 좋아하지 않는다. (Linux 같은 Windows도 마찬가지입니다.) @AndyProwl 아마''$ ​​Nodes \ r "' –

+3

내 대답은 다음과 같습니다. http://stackoverflow.com/a/8960119/112968 – knittl

답변

0

std::cin.ignore();을 제거하십시오. 실제로 사용자 입력을 기다리고 있습니다. 리눅스에서 테스트되었습니다.

+1

당신은 코멘트를 놓쳐 버렸을 것입니다. 얼마 전까지 만해도 'cin'을 알지 못 했으므로 OP가 올바른 텍스트를 얻는 이유가 혼란 스러웠습니다. 나는 강력하게 OP가 각 반복에 입력을 누르면 믿습니다. – chris

1

정확한 입력 파일을 사용하고 있습니까? Windows 개행 문자 포함? 리눅스는 윈도우 뉴 라인을 좋아하지 않는다. (리눅스 같은 윈도우도 마찬가지입니다)

윈도우에서 개행 문자는 각각 \r이고 그 뒤에는 \n이옵니다. 리눅스에서, 개행 문자는 이다. 단지\n이다. 스트림은 기본적으로 "텍스트 모드"에서 열립니다.이 모드는 시스템의 개행 문자가 무엇이든간에 단지 \n으로 변환합니다. 따라서 Windows에서 파일을 읽을 때 \r이 유용합니다. 그러나 리눅스는 줄 바꿈의 일부분이라는 것을 인식하지 못하며 \r을 다른 일반 문자와 마찬가지로 문자열의 끝에 두어 하드 코드 된 "$Nodes"과 일치하지 않게 만듭니다.

관련 문제