为什么这段代码的输出是空白的

Why is the output of this code blank

我正在尝试打印字符串的幂集。

代码编译成功,但是执行时,屏幕上没有打印任何内容。

我无法理解这背后的原因。

代码如下:

#include<stdio.h>
#include<string.h>
#include<math.h>
void main()
{
    char s[]="abcd";
    int i,j,k=1;
    int y=strlen(s);
    int z=pow(2,y);
    for(i=0;i<z;i++)
    {
        k=1;
        for(j=0;j<y;j++)
        {
            if(j & k)
                printf(" %c",s[j]);
            k=k<<1;
        }
        printf("\n");
    }
}

j & k 始终计算为 0

j =  0, k =    1     ==> j & K = 0
j =  1, k =   10     ==> j & K = 0 
j = 10, k =  100     ==> j & K = 0
j = 11, k = 1000     ==> j & K = 0

此代码如您所愿:

#include <stdio.h>
#include <string.h>

int main()
{
        char s[] = "abcd";
        int i,j;
        int y = strlen(s);
        int z = 1 << y;
        for(i = 0; i < z; i++)
        {
                for(j = 0; j < y; j++)
                {
                        if(i & 1 << j)
                                printf(" %c",s[j]);
                }
                putchar('\n');
        }
        return 0;
}

我承认我对您的代码进行了额外的更改,这些更改与您的问题无关。

真正重要的是i & 1 << j。这将检查 i 的第 j 位。为了便于阅读,也可以写成i & (1 << j)