当我尝试运行代码时输出中存在问题。
当输入s = 1,m = 1然后输出即太阳能和电源接触器结果。
当两个输入都为0,即s = 0且m = 0时,则表示“没有电源”。(正确输出)
当s = 1时,m = 0时应该说“没有力量”。并且能够获得正确的输出。
当s = 0,m = 1时,它应该说“没有电源”,而是继续向太阳能接触器信息(不是正确的输出)。
那么,任何人都可以解释我的问题是什么?
#include<stdio.h>
#include<stdbool.h>
#define TRUE 1
#define FALSE 0
int main()
{
bool s, m; //input parameters
bool a, b;
bool p, q;
bool t; //output parameters
printf("Enter the value of solar VMD : \n"); //scanning vmd values of solar
scanf("%d", &s);
printf("Enter the value of Mains VMD : \n"); //scanning vmd values of Mains
scanf("%d", &m);
if(s == 1,m == 1)
{
printf("Scan solar contactor : \n"); //scanning solar contactor
scanf("%d", &a);
printf("Scan Mains contactor : \n"); //scanning mains contactor
scanf("%d", &b);
if(a == 1, b == 1) //when solar & mains contactor are close
{
q = FALSE;
p = TRUE;
printf("Solar contactor and Mains contactor: %d %d", p, q);
}
else if(a == 0, b == 1) //when solar contctor is open and mains is closed
{
q = FALSE;
p = TRUE;
printf("Solar contactor and Mains contactor: %d %d", p, q);
}
else if(a == 1, b == 0) //when solar contactor is closed and mains is open
{
q = FALSE;
p = TRUE;
printf("Solar contactor and Mains contactor: %d %d", p, q);
}
else if(a == 0, b == 0) //when both solar and mains are open
{
q = FALSE;
p = TRUE;
printf("Solar contactor and Mains contactor: %d %d", p, q);
}
else
{
printf("Problem with contactors");
}
}
else
{
printf("There is no power");
}
getchar();
getchar();
return 0;
}
答案 0 :(得分:3)
if(s == 1,m == 1)
此代码不符合您的想法。了解operators of the C language,尤其是logical operators和the comma operator。
<强>更新强>
另一个错误是%d
无法与bool
一起使用。实际上没有scanf
格式。所以你必须坚持int
(这是做布尔运算符的完美类型),或者编写自己的函数来从流中读取bool
。
答案 1 :(得分:0)
错误的一个例子如下:
if(s == 1,m == 1)
而不是那样,你可能想要
if (s == 1 && m == 1)
答案 2 :(得分:0)
**Instead of:** **put:**
if(s == 1,m == 1) - if(s == 1 && m == 1)
if(a == 1,b == 1) - if(a == 1 && b == 1)
else if(a == 0, b == 1) - else if(a == 0 && b == 1)
else if(a == 1, b == 0) - else if(a == 1 && b == 0)
else if(a == 0, b == 0) - else if(a == 0 && b == 0)
逻辑运营商&amp;&amp;和||在评估两个表达式以获得单个关系结果时使用。运营商&amp;&amp;对应于布尔逻辑运算AND。如果两个操作数都为真,则此操作结果为true,否则为false。以下面板显示了操作员&amp;&amp ;;的结果。评估表达式a&amp;&amp; B:
a b a && b
true true true
true false false
false true false
false false false
答案 3 :(得分:0)
if(s == 1,m == 1)
这是不对的
你需要wirte
if(s == 1&amp;&amp; m == 1)
&安培;&安培;此运算符检查s == 1和m == 1 如果是,那么条件为真或转到elseif块