2

我对我用 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);}

我的编译器说以下内容:“格式%d需要类型的参数,int*但参数 2 具有类型_Bool*”。据我所知, boolean 被认为是 int 类型,所以我不确定为什么会收到此警告。除了设置另一个变量来测试之外,我还能如何测试这种情况scanf,然后将另一个_Bool类型的变量分配给 true 或 false?任何反馈表示赞赏。我谢谢大家:)。

4

1 回答 1

1

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

没有scanf您想要的说明符,因此char如果您真的想要最小存储空间,则需要使用 a 。之后您始终可以将值分配给 a _Bool

例如

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

(此外,您的代码不会按预期工作。如果您输入无效字符%d,它将进入无限循环。)

于 2013-03-16T20:49:21.210 回答