2016-09-23 5 views
9

다음 예제에서는 boolean 변수의 값을 검색하려고합니다. 내가 GCC에서 컴파일 할 때, 나는, 경고 다음 얻을C에서 bool의 형식 지정자가 있습니까?

warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘_Bool *’ [-Wformat=] 
    scanf("%d",&b); 

코드 :

#include <stdio.h> 
#include <stdbool.h> 

int main() 
{ 
     bool b; 

     scanf("%d",&b); 
     printf("%d\n",b); 
} 

내 질문이있다 C에서 부울의 형식 지정이 있습니까?

+3

. 대안으로'printf ("% s \ n", b? "true": "false");'를 원할 수도 있습니다. –

+0

이것은 인쇄에 관한 것이므로 100 % 중복은 아닙니다. http://stackoverflow.com/questions/12920694/format-specifier-in-scanf-for-bool-datatype-in-c는'scanf()에 관한 것입니다. '. 그러나 아직도, 나는 충분히 추측한다. :) – unwind

+0

@unwind : 당신 말이 맞아요. 다시 사과하겠습니다. 이제 C 표준을 파헤 칠 때입니다. – Bathsheba

답변

3

printf를 들어

C.

bool 유형에 대한 형식 지정자 없다, 당신은 int에 암시 적 홍보에 의존하고, 지정된 포맷으로 %d를 사용할 수 있습니다.

scanf의 경우 int으로 읽고 적절하게 변환해야합니다. 다시 %d을 사용하십시오.

-3

bool의 경우 C에는 지정자가 없습니다. 원하는 경우 경고를 피하려면 printf()으로 타이프 캐스팅해야합니다.

그러나 bool 유형을 나타내는 전용 형식 지정자가 없습니다.

scanf() 경고를 방지하기 위해 아래에보십시오 : 하나 없다

scanf("%d",(int*)&b) 
+0

'bool'은 반드시'int'와 같은 크기입니까? 그렇지 않으면'(int *) & b'는 나에게 안전하지 않은 것처럼 보입니다. –

+0

필요 없음, 일반적으로 bool (매회가 아님) 크기는 1 바이트입니다. 경고 용입니다. – Stubborn

+1

하지만 scanf는 int 크기의 값을 그 위치에 저장하므로 동작은 정의되지 않습니다. –

관련 문제