为什么我在每个“其他”都收到“预期表达式”错误?

时间:2015-10-01 11:44:01

标签: c if-statement compiler-errors

此算法必须以新月顺序打印四个数字。当我启动它时,我收到一个错误:“预期的表达”。为什么会这样?

#include <stdio.h>

int main()
{
    int A,B,C,D,Riserva;

    scanf("%d",&A);
    scanf("%d",&B);
    scanf("%d",&C);
    scanf("%d",&D);

    if(A>B)
    else
    {
        Riserva=A;
        A=B;
        B=Riserva;
    }
    if(C>D)
    else
    {
        Riserva=C;
        C=D;
        D=Riserva;
    }
    /*Fine*/
    if(A>C)
        else
        {
            Riserva=A;
            A=C;
            C=Riserva;
        }
    if(B>D)
        else
        {
            Riserva=B;
            B=D;
            D=Riserva;
        }
    /*Fine*/
    if(A>D)
        else
        {
            Riserva=A;
            A=D;
            D=Riserva;
        }
    if(B>C)
        else
        {
            Riserva=B;
            B=C;
            C=Riserva;
        }

    printf("\n\n%d %d %d %d",D,C,B,A);

}

4 个答案:

答案 0 :(得分:4)

即使它是空的,你仍需要一份陈述。

类似

if(A>B)
{
}
else
{
    Riserva=A;
    A=B;
    B=Riserva;
}

但是,简单地反转条件可能更容易,并且喜欢

if(A<=B)
{
    Riserva=A;
    A=B;
    B=Riserva;
}

答案 1 :(得分:2)

引用C11标准,章节§6.8.4.1,if..else语句的语法是

  

if(表达式)声明else声明

如果我们比较您的代码,我们会看到

  

if(表达式)else声明

这是无效的语法。你错过了一个语句

您必须在if (condition)部分之后添加一条声明,即;{}(空声明)。在这种情况下,使用if...else没有多大意义。您可以将if...else检查缩减为单个if语句,例如

if(A<=B)   //condition reversed
{
   //previously else block code
}

答案 2 :(得分:0)

错误是因为if代码块不包含任何语句。你可以这样做

if(A>B);

或者

if(A>B){}

答案 3 :(得分:0)

基本上每一个&#39;如果&#39;条件评估有真假分支。

您需要为true分支或者true和false分支提供语句。所以你总是需要为true分支提供语句,即使是null语句也是如此。

在你的情况下,真正的分支根本就没有声明。

所以你可以通过

解决这个问题
    if(A>C);
    else
    {
        Riserva=A;
        A=C;
        C=Riserva;
    }

OR

    if(A>C)
    {
    }
    else
    {
        Riserva=A;
        A=C;
        C=Riserva;
    }

注意在第一种情况下,true分支中有一个NULL语句,即只有分号。在第二种情况下,有一个真正的分支&#39;使用花括号创建,没有任何文字。