此算法必须以新月顺序打印四个数字。当我启动它时,我收到一个错误:“预期的表达”。为什么会这样?
#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);
}
答案 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;使用花括号创建,没有任何文字。