C语言的字符数组和字符串问题

#一直在输出错误代码,好像是从第二个循环中产生的错误,但是我没有发现到底是哪里错了,请各位答主指点迷津!

有一道课后习题如图

img

输出的结果乱码如图

img

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int i, j, quantity=0,max=0,maxi=0;
    char a[100];
    gets(a);
    for (i = 0; a[i]!='\0'; i = j + 1)
    {
        for (j = i; (a[j]!=' ')&&(a[j]!='\0'); j++)
        {
            quantity += 1;


        }
        if (quantity > max)
        {
            max = quantity;
            maxi = i;
        }
        quantity = 0;
    }

    for (i = maxi; a[i]!=' '; i++)
    {
        printf("%c", a[i]);
    }



}

j变量没有初始化为0

i = j + 1是想干啥

修改如下,改动处见注释,供参考:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//#include <math.h>
int main()
{
    int i, j, quantity = 0, max = 0, maxi = 0;
    char a[100];
    gets(a);
    for (i = 0; a[i] != '\0'; i = j + 1)
    {
        for (j = i; (a[j] != ' ') && (a[j] != '\0'); j++)
        {
            quantity += 1;
        }
        if (quantity > max)
        {
            max = quantity;
            maxi = i;
        }
        if (a[j] == '\0')  break; //修改 内层循环到字符串结束处,跳出结束外循环
        quantity = 0;
    }
    for (i = maxi; a[i] != ' ' &&  a[i] != '\0'; i++) //修改 找到的最长单词可能是最尾部的
    {
        printf("%c", a[i]);
    }
}