2012-10-26 2 views
1

, 나는 형식은 내 프로그램에서 루프가 다음의 경우 (N> 0) 문을 사용하여에는 루프 속보가 아닌 문자 현재

#include<stdio.h> 

    int main() 
    { 
    int n; 

     while(1) 
     { 
     printf("Enter a positive number, n"); 

     scanf("%d",&n); 

     if(n>0) 
      { 
       break; 
      } 
      } 
     } 

내 의도를 사용자가 양의 정수를 입력하는 경우에만 루프를 종료하는 것입니다. 그러나 사용자가 문자 "g"를 입력하면 ASCII 값이 해석되어 루프가 계속 중단됩니다. 사용자가 n에 대해 양의 정수 값을 입력 할 때 중단되도록이 루프를 어떻게 구성합니까?

+0

내 경우에는 "g"또는 임의의 문자를 입력 할 때 깨지 않을 것입니다 ...? – Omkant

+0

@Omkant 'n'은 아무것도 초기화되지 않았기 때문에. 정의되지 않은 동작이 표시됩니다. 아래 답변 및 의견을 참조하십시오. – paddy

+0

http://stackoverflow.com/a/22236689/3388865 위의 링크에서 질문에 대한 해결책을 게시했습니다. –

답변

4

확인 성공적인 입력의 수를 반환 scanf의 반환 값은 읽어

int rc = scanf("%d",&n); 

if (rc==1 && n>0) { 
    ... 
} 

난 당신이 문자열로 입력을 읽고으로 strtol를 사용하여 정수로 변환 fgets를 사용하는 것이 좋습니다 것입니다

scanf는 @paddy가 말한 이유 때문에 좋지 않은 선택입니다.

+0

'scanf ("% d", & n)'는 입력 스트림에서 비 정수 바이트를 제거하지 않습니다. OP는 정수가 입력 될 때까지 루핑을 계속하려고합니다. 따라서 정수 입력이 실패하고 다시 루프하면 단일 문자를 읽어야합니다. – paddy

+0

오 고마워 ... +1 – Omkant

+0

@ 킹스 인디아 완벽, 고마워. –