你能用scanf测试_Bool类型的有效输入吗?关于C.

时间:2013-03-16 20:40:32

标签: c boolean scanf

我对我用C编写的代码片段有疑问:

 printf("Do you own a microwave?Enter 1 for Yes and 0 for No\n");
    while((scanf("%d",&microw))==0){
        printf("Please enter a valid number:\n");
    scanf("%d",&microw);}

我的编译器说如下:“format %d期望类型为int*的参数,但参数2的类型为_Bool*”。据我所知,boolean被认为是一个int类型,所以我不确定为什么会收到这个警告。除了设置另一个变量以使用scanf进行测试,然后将_Bool类型的另一个变量分配为true或false之外,我还能如何测试此条件?任何反馈都表示赞赏。谢谢大家:)。

1 个答案:

答案 0 :(得分:1)

你收到它是因为,它期待int *并且你传递_Bool *。它们都是整数,但不同的类型 - 在我的系统_Bool上的大小为1,int的大小为4。

你想要的没有scanf说明符,所以如果你真的想要最小的存储空间,你需要使用char。您可以随后将值分配给_Bool

e.g。

scanf("%c",&microw);
_Bool b = microw - '0';

(此外,您的代码无法按预期运行。如果您使用%d输入无效字符,它将进入无限循环。)