2015-01-12 6 views
2

누구나 설명해 주시겠습니까? 내 'while'루프가 문자 'Q'를 입력하면 종료되지 않습니다. 사용자가 'Q'를 입력 할 때 부울 값을 false로 설정 했는데도이 값은 char input에 해당하는 scanf 이후에 끝납니다.While 루프 while C

내 코드 :

#include <stdio.h> 
typedef int bool; 
#define true 1 
#define false 0 

int main(void) { 
    char input; 
    char output; 
    bool tf = true; 

    printf("Welcome to the Coder!\n"); 

    while (tf) { 
     printf("Choose Input (H,A,B,Q) : "); 
     scanf_s(" %c\n", &input); 

     if (input == 'Q') { 
      tf = false; 
     } 
     else { 
      printf("Choose Output (H,A,B) : "); 
      scanf_s(" %c\n", &output); 
     } 
    } 

    return 0; 
} 
+2

Q를 입력 한 후 Enter 키를 누르셨습니까? – immibis

+3

또 다른 scanf 문제가 있습니까? –

+0

예 입력을 누르십시오. – Impalerz

답변

4

:

내가 당신의 코드를 변경을 제안 문제는 scanf_s의 이상한 경우입니다. MSDN에 어코드, 당신은이 구문을 사용하여 하나의 문자를 읽어

scanf_s(" %c", &input, 1); 

scanf_s에서 \n를 제거하고 그것은 단지 하나의 문자를 읽을 알 수 있도록 1 개 매개 변수를 추가합니다.

(input == 'Q' || input == 'q') 

는 또한 왜 typedef int bool;를 추가 않은 경우

+0

이것은 문제를 해결했습니다. 나는 정말로 % c 후에 \ n을 필요로하지 않는다. – Impalerz

3

난 당신이 콘솔에 작은 편지 Q를 입력하는 것으로 의심하고 있습니다 :

if (input == 'Q' || input == 'q') { 
    tf = false; 
} 
+2

또는 #include 및 if (toupper (input) == 'Q'). –

1

당신은 추가해야합니까? 이것은 불필요했다. ... 내 컴파일러가 인식하지 못하기 때문에 내가 scanfscanf_s을 대체

이 (실수로 문제를 해결

더 나은이기 때문에 컴파일 할 때이 오류 없었다

는 컴파일 -> Compiled Code