为什么根据我的代码在纸上计算的输出是错误的?

时间:2016-11-04 20:53:25

标签: c

我为类项目编写了这段代码:

#include<stdio.h>
int main()
{
    int n = 0, i = 1, c = 0, d = 0, a = 0, b = 0, j = 1;
    scanf("%d", &n);
    while (i <= n)
    {
        b = a;
        scanf("%d", &a);
        if (a >= b)
        {   
            i++;
        }
        if (a == b)
        {
            j++;
        }   
        if (a < b)
        {
            i++;
            break;
        }
    }
    while ((i <= n) && (i != j + 2))    
    {
        b = a;
        scanf("\n%d", &a);
        if (a < b)
        {
            i++;
        }
        if (a > b || a == b)
        {
            i++;    
            c = 1;
            break;
        }
    }
    if (c == 1)
    {
        while (i <= n)
        {
            scanf("\n%d", &a);
            i++;
        }
        printf("No");
    }        
    while (i <= n)
    {
        b = a;
        scanf("\n%d", &a);
        if (a <= b)
        {
            i++;
        }
        if (a > b);
        {
            i++;
            break;
        }
    }
    while (i <= n)
    {
        b = a;
        scanf("\n%d", &a);
        if (a > b)
        {
            i++;
        }
        if (a < b || a == b)
        { 
            i++;
            d = 1;
            break;
        }
    }
    if (d == 1)
    {
        while (i <= n)
        {
            scanf("\n%d", &a);
            i++;
        }
        printf("No");
    }
    if (c != 1 && d != 1)
    {
        printf("Yes");
    }
}

我期望这笔收入的输出: 6 4 4 3 2 3 2

是“不”。但相反,它是“是”。我在纸上完成了代码中的所有步骤,我自己得到的答案是正确的。但是,当我运行该程序时,它不是。有人可以解释一下原因吗?

1 个答案:

答案 0 :(得分:1)

您的代码中出现错误,分号结束指令

while (i <= n)
{
    b = a;
    scanf("\n%d", &a);
    if (a <= b)
    {
        i++;
    }
    if (a > b); // remove this semicolon
    {
        i++;
        break;
    }
}

编辑:为了清楚起见,正在结束&#34;如果&#34;指示,它就像一个空的&#34; if&#34;像:

if ( a > b ) { }

所以

i++;
break;

作为下一个指令执行