如何摆脱第一个if-else构造,因为当我输入负值时,因为这里的条件被检查,然后它转到最后一个else语句,在那里它只打印零
#include<stdio.h>
int main() {
int x;
scanf("%d", &x);
if(x>0)
{
printf("Positive");
{
if(x%2==0)
{
printf("Even");
}
else
{
printf("Odd");
}
}
我希望在输入负值时执行此操作,但无法执行
if(x<0)
{
printf("Negative");
{
if(x%2==0) {
printf("Even");
}
else {
printf("Odd");
}
}
}
}
else {
printf("Zero");
}
return 0;
}
只要重新生成代码,就会发现奇怪的{
,就像printf("Positive");
之后的那个
只需删除这个奇怪的{
并修复您的编码风格即可:
#include<stdio.h>
int main() {
int x;
scanf("%d", &x);
if ( x > 0 ) {
printf("Positive");
if ( x % 2 == 0 ) {
printf("Even");
} else {
printf("Odd");
}
} else if( x < 0 ) {
printf("Negative");
if( x % 2 == 0 ) {
printf("Even");
} else {
printf("Odd");
}
}
else {
printf("Zero");
}
return 0;
}
更容易阅读,更容易调试
问题似乎是复合语句的嵌套不正确。
我可以提出以下解决方案。
#include <stdio.h>
int main( void )
{
enum { Negative = -1, Zero = 0, Positive = 1};
printf( "Enter a number: " );
int x = 0;
scanf( "%d", &x );
int sign = ( 0 < x ) - ( x < 0 );
switch (sign)
{
case Negative:
printf( "Negative " );
break;
case Zero:
puts( "Zero" );
break;
case Positive:
printf( "Positive " );
break;
}
if (sign != 0)
{
puts( x % 2 == 0 ? "even." : "odd." );
}
}
程序输出可能看起来像
Enter a number: 10
Positive even.