2016-09-05 3 views
-5

C에서이 루프를 벗어날 수없는 이유는 무엇입니까?C에서 while 루프를 깨는 방법

 char command[1]; 
     scanf("%s", command); 
     while(1){ 
       scanf("%s", command); 
       if(command == "q") 
         break; 
     } 
+6

정의되지 않은 동작이 있기 때문에. 문자열에 충분한 공간을 제공하지 않습니다. 당신은 그와 같은 문자열을 비교하지 않는다 ('strcmp()'사용). 'scanf()'의 결과를 확인해야한다. 'scanf()'를 두 번 연속 호출하는 것은 좋은 생각이다. –

+2

그리고'strcmp'를 사용하십시오. –

답변

1

당신이 뭘 하려는지에 따라는 scanf 형식 %c 대신 %s 할 수 있습니다. 그게 당신에게 하나의 차질을 줄 것입니다. 그러면 다음과 같이 "q"와 비교할 수 있습니다 : command[0]=='q'.

그러나 다중 문자 명령을 사용하는 것이 좋을 수 있습니다.이 경우 strcmp와 긴 버퍼가 원하는 것입니다.

0

'명령'은 힙 세그먼트의 어딘가에있는 메모리 블록의 주소를 포함하는 변수이고, 'q'는 컴파일러에서 모든 상수 문자열이 저장되는 텍스트 세그먼트의 메모리 블록 주소로 바뀝니다. 즉 '=='연산자는 프로세스 메모리의 여러 세그먼트에서 두 개의 주소를 비교합니다. 그러므로 결코 진실이 아닙니다. strcmp 또는 strncmp 함수를 사용하여 문자열을 비교하고 이러한 문자열의 주소를 비교해야합니다.

관련 문제