2016-09-23 55 views
9

Aşağıdaki örnekte, boolean değişken türünün değerini taramaya çalışıyorum. Ben GCC derleme, ben, uyarı aşağıdaki almakC içinde bool'un herhangi bir format belirteci var mı?

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

kodu:

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

int main() 
{ 
     bool b; 

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

Benim sorum, C içinde bool herhangi biçim belirteci var mı?

+3

. Alternatif olarak, printf ("% s \ n", b? "True": "false"); 'isteyebilirsiniz. –

+0

Bu,% 100 dupe değildir, çünkü bu, yazdırma ile ilgilidir ve http://stackoverflow.com/questions/12920694/format-specifier-in-scanf-for-bool-datatype-in-c, scanf() hakkındadır '. Ama yine de, yeterince iyi sanırım. :) – unwind

+0

@unwind: Haklısın. Özür dilediğimde tekrar açılacağım. Şimdi C standardını kazmanın zamanı geldi. – Bathsheba

cevap

3

printf için

C

yılında bool türü için hiçbir biçim belirteci yok, int için örtülü promosyon itimat ve belirtilen biçimlendirici olarak %d kullanabilirsiniz. scanf için

, bir int içine okumak ve uygun şekilde dönüştürmek gerektiğini. Yine, %d kullanarak.

-3

Boole için C belirtme özelliği yoktur. İsterseniz uyarılardan kaçınmak için printf() numaralı telefondan yazmalısınız.

Ancak, bool türünü temsil eden özel bir biçim belirteci yoktur.

scanf() uyarı önlemek için aşağıdaki deneyin: bir rapor yok

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

Boole, int ile aynı boyuta sahip mi? Aksi takdirde '(int *) & b' bana güvensiz görünüyor. –

+0

Hayır gerekli değil, genellikle bool (her zaman değil) boyutu 1 byte, bu sadece uyarı içindir. – Stubborn

+1

Fakat sonra 'scanf 'bu konumda int boyutlu bir değer saklar, böylece davranış tanımsızdır. –