C语言,请问这两行代码是什么意思

请问 else printf("^%-4c",ch+64);和 if(i%8 == 0) printf("\n");这两句是什么意思
#include

int main(void)
{
char ch;
int i;
for(i=1; (ch=getchar()) != EOF; i++)
{
if (ch >= ' ' || ch == '\n' || ch == '\t') printf("%-5c",ch);
else printf("^%-4c",ch+64);
printf("%-5d",ch);
if(i%8 == 0) printf("\n");
}
return 0;
}

 else printf("^%-4c",ch+64); //输出字符占4列,左对齐
printf("%-5d",ch);
if(i%8 == 0) printf("\n");//i能被8整除就输出一个回车换行。

单独的代码我看的懂
这是一到题目的答案
题目是:写一个程序,把输入作为字符流读取,直到遇到EOF。令该程序打印每个输入字符及其ASCII编码的十进制值。注意在ASCII序列中空格字符前面的字符是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分期打印\n或\t。否则,使用控制字符符号。例如,ASCII的l是Ctrl+A,可以显示为AA。注意A的ASCⅡ值是Ctrl+A的值加64。对其他非打印字符也保持相似的关系。除去每次遇到一个换行符时就开始一个新行之外,每行打印10对值。
我是不理解那两行代码在这个问题中实现了什么

方便看输出结果
条理更清晰