如何用这个C代码解决?

时间:2012-02-19 06:28:15

标签: c implementation

当我尝试运行代码时输出中存在问题。

当输入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;
}

4 个答案:

答案 0 :(得分:3)

if(s == 1,m == 1)

此代码不符合您的想法。了解operators of the C language,尤其是logical operatorsthe 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块