Не работает МОЙ личный код на СИ

Задача: убрать первое и последнее слово из каждой четной строки. Проблема в том, что программа работает только с нечетными строками, а при попытке как-нибудь это исправить она начинает работать некорректно

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 129
int main()
{
    int i,j,k,b,l;
    float n;
    j = 0;
char a[20][max];
printf("strok: ");
scanf("%d",&b);

for(i=0;i<=b;i++){
gets(a[i]);
}

for(i=0;i<=b;i++)//удаляет первое слово
{

    {
        n=(i % 2);

        j = 0;
        if ( n != 0)
        while (a[i][j] != 32)
    {
        a[i][j] = 32;
        j++;
    }
    }
}


for(i=0;i<=b;i++) //удаляет последнее слово
{
    n=(i % 2);
    if (n != 0)
        {
        j = strlen(a[i]);
        while (a[i][j] != 32)
            {
                a[i][j] = 32;
                j--;
            }
        }
}




for(i=0;i<=b;i++){
puts(a[i]);
}
return 0;
}

Ответы (1 шт):

Автор решения: Harry

Примерно так:

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

void removeWords(char * buf)
{
    char * s = buf;
    while(ispunct(*s) || isblank(*s)) ++s;
    while(isalnum(*s)) ++s;
    while(ispunct(*s) || isblank(*s)) ++s;
    memmove(buf,s,strlen(s)+1);

    s = buf + strlen(buf) - 1;
    while(ispunct(*s) || isblank(*s) || *s=='\n') --s;
    while(isalnum(*s)) --s;
    *s++ = '\n';
    *s = 0;
}

int main()
{
    #define  MAXLEN 512
    char buf[MAXLEN];
    for(int no = 1; fgets(buf,MAXLEN,stdin); ++no)
    {
        if (no%2==0) removeWords(buf);
        printf("%3d: %s",no,buf);
    }
}

См. https://ideone.com/gqYLU4

→ Ссылка