您可以使用 scanf 测试 _Bool 类型的有效输入吗?关于 C

标签 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);}

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

最佳答案

您收到它是因为,嗯,它期待一个 int * 而您正在传递一个 _Bool *。它们都是整数,但类型不同 - 在我的系统上,_Bool 的大小为 1,而 int 的大小为 4。

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

例如

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

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

关于您可以使用 scanf 测试 _Bool 类型的有效输入吗?关于 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15454481/

相关文章:

c - 使用 sscanf 多次读取字符串

c - 打印错误,字符位置混淆,怎么了,循环

Python - 将字符串映射到 boolean 数组

c++ - 为什么 scanf 会跳过输入 txt 文件中的整数?

javascript - 选择框中的 Angular , boolean 值

c - 通用C程序

c - 输入的动态加载

c - 计算阿克曼时如何检查堆栈使用情况

c - 这个十进制到二进制转换器有什么问题(没有迭代)

c - 发送短信 GSM 单击