数组str为char类型,n为int类型,直接赋值会出现问题打印无效字符,可在n%2后面加上+'0',当n满足条件进入while循环之后任何结束循环方法会进入死循环,应该给i写个判断语句,例如if(i==31)break;最后循环为什么用j做循环,然后用i做打印呢,i的值一直没变啊,而且i就算跳出了也是31,31超了数组范围,应该直接for(i=0;i<31;i++)printf("%c",str[i]);就行了不需要j。
c函数里i没有初始化,str[i]可能越界了。n%2得到的是ascii码为0,1的字符,显示不了,需要改成n%2+'0'