scanf("%d",&a)
if(a<10)//a=0的时候,明显符合a<10条件,但是不符合里面嵌套的a>1条件,不做任何操作。
{
if(a>1)
t=1
}
else t=2
printf("请输入a的值")
scanf("%d",&a)
if(a<10)//a=100,第一步验证就不符合条件,又没有else语句对应,也是什么都不做
{
if(a>1)
t=1
else t=2
}
我还是加上第二题的实战图吧:
我初始化t为99999了,防止输出未初始化的变量。可以看到99999并没有改变。也就是说a=100的时候,没有影响到t。不要看死书了,按自己的逻辑理解吧。
总之看if 的嵌套,else总是与最近的if成对。然后自己加大括号对好格式,用手写在纸上画明了一点。希望能帮到你!
就是在一个语句的内部,含有一个或更多的同种语句。例如:
if(条件1)
{if(条件2)....}
例如:
for(i=0i<5i++)
{for(j=0j<10j++)
....
}
一般的宏嵌套展开规则是 由内向外 ,先将内层宏展开,再把外层宏展开:
输出:
嵌套宏 B(A(2)) 会先展开为 B((2 + 5)) ,然后再展开为 ((2 + 5) * 5) ,所以最终结果为35
如果宏的参数直接带有 # ,则不会展开内层的嵌套宏
输出:
因为 STR 宏的参数直接带有 # ,所以 STR 内部嵌套的内容不会被进一步展开,故 STR(ADD(3, 4)) 输出为 ADD(3, 4) ;
因为 TO_STR 宏的内容并没有 # ,所以嵌套的宏 ADD(3, 4) 依旧可以展开,故 TO_STR(ADD(3, 4)) 输出结果为 (3 + 4) ;
如果宏的参数直接带有 ## ,则会先将参数通过 ## 拼接,然后再依次进行展开
输出:
由于 DEF_VAR 中带有 ## 所以会先将里面的内容使用 ## 拼接,所以会最先展开为 TO_STR(var_PARAM(10)) ,由于展开后 PARAM(10) 已经变成了 var_PARAM(10) ,已经不是有效的宏了,所以最终再经过 TO_STR 的转换后,结果就是 var_PARAM(10)