解读程序,每一行都进行注解

#include
#include
int main(void){
char a[100][100],c;
int length,i;
length=80;
i=0;
while((c=getchar())!='\n'){
if(c==' '){
a[length][i]='\0'; //这一步很重要,防止 字符数组 输出过界
length--;
i=0;
continue;
}
else {
a[length][i]=c;
i++;
}
}
a[length][i]='\0';
for(i=length;i<81;i++){
if(i==80){
printf("%s",a[80]);
break;
}
else printf("%s ",a[i]);
}
return 0;


int main(void){ // 定义主函数。
    char a[100][100],c; // 定义一个二维字符数组 a,用于存储输入的字符串。定义字符变量 c,用于逐个读取输入的字符。
    int length,i; // 定义整型变量 length 和 i,用于记录字符串的长度和当前位置。

    length=80; // 将 length 初始化为 80,表示字符串的最大长度为 80 个字符。
    i=0; // 将 i 初始化为 0,表示当前位置为字符串的开头。

    while((c=getchar())!='\n'){ // 循环读取字符,直到遇到换行符 \n(输入的字符串结束)为止。
        if(c==' '){ // 如果当前字符是空格,则执行以下操作:
            a[length][i]='\0'; // 将当前单词的结尾设置为字符串结束符,防止字符数组输出过界。
            length--; // 减少字符串的长度,为下一个单词腾出空间。
            i=0; // 重置当前位置为单词的开头。
            continue; // 继续读取下一个字符。
        }
        else {
            a[length][i]=c; // 将当前字符存储在二维字符数组 a 的当前位置。
            i++; // 增加当前位置的索引。
        }
    }

    a[length][i]='\0'; // 在最后一个字符存储完毕后,将最后一个单词的结尾设置为字符串结束符。

    for(i=length;i<81;i++){ // 从 length 开始,循环遍历数组中存储的单词。
        if(i==80){ // 如果当前位置是数组的结尾位置:
            printf("%s",a[80]); // 输出该位置的单词。
            break; // 跳出循环。
        }
        else
            printf("%s ",a[i]); // 输出当前位置的单词,并在单词之后加上一个空格。
    }

    return 0; // 返回 0,表示程序执行成功。
}