2011-08-03 5 views
0

이 프로그램은 str_length 변수에 이름의 문자 수를 저장해야합니다 (여기서 이름은 <이고 "."로 끝나는 50 자입니다). 왜이 코드가 첫 번째 문자 만 뱉어 버리는 지, "Jonathan"과 같은 이름의 경우 i = 0 일 때 루프에서 깨집니다. "."을 찾을 때까지 문자열을 통해 파싱하지 않아야하며, 그 다음에 for 루프를 끊어야합니다.Break 문이 작동하지 않습니다.

#include <iostream> 
#include <cstring> 

using namespace std; 

int main() 
{ 

string name; 
int str_length; 

cout << "What's your name" << endl; 

cin >> name; 

for (int i = 0; i < 50; i++) 
{ 
    cout << name[i]; 
    if (name[i] == '.') 
     str_length = i; 
     break;   
} 

cout << endl; 

system("PAUSE"); 

return 0; 
} 
+4

C++에서는 들여 쓰기가 의미가 없습니다. 'if'의 본문에'{}'을 잊어 버렸습니다. – Nemo

+0

그러나 문자열의 find 메소드를 재 작성하고 있습니다. 또한'std :: string'에 포함 할 헤더는''입니다. http://www.cplusplus.com/reference/string/string/find/ – UncleBens

+0

또한 입력이 50 자 이상이라고 가정하지 마십시오. 문자열은 어떤 크기라도 가질 수 있으며,'size()'메쏘드는 그것을 알려줍니다. – UncleBens

답변

2

당신은 {} 조건 if 주위가 누락되었습니다. 따라서 break은 아무런 조건없이 실행되기 때문에 루프는 첫 번째 반복에서 빠져 나옵니다.

5

당신은이 :

for (int i = 0; i < 50; i++) 
{ 
    cout << name[i]; 
    if (name[i] == '.') 
     str_length = i; 
     break;   
} 

실제로 :

for (int i = 0; i < 50; i++) 
{ 
    cout << name[i]; 

    if (name[i] == '.') 
    { 
     str_length = i; 
    } 

    break;   
} 

당신이 원하는 :

for (int i = 0; i < 50; i++) 
{ 
    cout << name[i]; 
    if (name[i] == '.') 
    { 
     str_length = i; 
     break; 
    }  
} 

당신입니다 break 각 루프의 끝에서 보내고.

+0

구문 오류가 있습니까? – Rasel

+0

잘못된 용어입니다. 내 사과. – ssell

0

이것은 한 줄의 if 문에서도 중괄호를 사용하지 않을 위험이 있음을 보여줍니다. 나는 당신이 이것을했다고 의심합니다 :

if (name[i] == '.') 
    str_length = i; 

그리고 나서 break을 추가했습니다. 이 작업을 수행했다면 :

if (name[i] == '.') { 
    str_length = i; 
} 

위쪽 앞에 중괄호 안에 중단을 추가하면 버그가 발생하지 않았을 것입니다.

+0

아, 프로그래밍의 미묘함 ... 고마워. 그건 아주 asinine 오류 였어. – Chris

+0

아니요 asinine! 그러나 더 나은 실습을 통해 피할 수없는 - 항상 중괄호를 사용하여 한 줄짜리 코드도 쉽게 수정할 수 있습니다. –

관련 문제