#include<stdio.h>
void main()
{
int a,b,c;
for(b = c = 10; a = "- FIGURE?, UMKC,XYZHello Folks,TFy!QJu ROo TNn(ROo)SLq SLq ULo+UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^NBELPeHBFHT}TnALVlBLOFAkHFOuFETpHCStHAUFAgcEAelclcn^r^r\\tZvYxXyT|S~Pn SPm SOn TNn ULo0ULo#ULo-WHq!WFs XDt!"[b+++21];)
{
for(;a-->64;)
{
putchar((++c == 'Z') ? (c = c/9) : (33^b&1));
}
}
getch();
}
c语言的上述程序将输出显示为印度地图。在上面的程序中,外部for循环有2个插槽,第三个空闲。但是我理解程序是如何工作的但是怀疑是外部for循环的条件槽用作赋值槽。在语法和逻辑上这应该是错误的但它的工作原理。根据数组索引中的值,相应char
的ASCII码被赋予变量a
这是如何工作的?
答案 0 :(得分:7)
外部for循环的条件槽将字符串文字的一个字符分配给a
,同时递增b
。由于赋值运算符也返回指定的值,因此外部for循环的条件将成为字符串文字的某些字符的值。因为字符串是'\0'
- 在C中分隔,所以条件为真,直到表达式b++ + 21
到达字符串的结尾(然后返回字符串的最后一个(额外)字符,并且它是&#39; s等于0
,因此评估为false
)
实际上,这是一个用于迭代字符串的常见C语言的混淆且更复杂的版本,如下所示:
char *string = "my string";
int i;
for (i = 0; string[i]; ++i)
/* do something with string[i] */
可以简化为:
int i = 0;
for (; string[i++]; )
/* do something with string[i] */
此外,当前字符可以提取到单独的char
变量c
:
int i = 0;
char c;
for (; c = string[i++]; )
/* do something with c */
也可以使用while循环:
while (c = string[i++])
/* do something with c */