C语言 关于程序 清空缓存的问题fflush(stdin)

程序就是 这样的一个程序: 编写一个函数接受一个字符串作为参数,并删除字符串中的空格,在一个程序中测试该函数,使用循环读取输入行,直到用户输入一个空行。该程序应该用该函数读取每一个输入的字符串,并显示处理后的结果。

我编写的程序如下:

#include<stdio.h>

#include<string.h>

void det(char *words);

#define  L   20 

int main(void)

{
    char  words[L];    
        
    printf("please enter a words:  \n");
    
    fgets(words,L-1,stdin);
    
    do {        
        
                        
        printf("what you enter is :  \n");
        
        fputs(words,stdout);
        
        printf("\n");
        
        det(words);     
            fflush(stdin);          
        
    }  while(fgets(words,L-1,stdin)!=NULL);
    
    
     return 0;    
}

void det(char *words)

{
    char *ptr;
    
    int i;
    
    for(;*words!='\0';words++)
    
    {
        if(*words!=' ') 
        
        {
            *(ptr+i)=*words;
            
            i++;
        }
        
        *(ptr+i)='\0';
        
    }
    
    printf("after delete the blank, the words is : \n");
    
    puts(ptr);
    
    printf("*********\n");
    
    
}

这个程序的结果是正常的,

但是 如果将 fflush(stdin) 提到前面去,结果就不正常了,只能输入一次,程序就自动结束了,没法循环输入,这是什么原因呢? 放在输入之后,立即清空缓存 , 有什么影响吗?
将fflush(stdin) 提到前面 的程序如下:


```c
#include<stdio.h>

#include<string.h>

void det(char *words);

#define  L   20 

int main(void)

{
    char  words[L];

    
    printf("please enter a words:  \n");
    
    fgets(words,L-1,stdin);
    
    do {        
        
        fflush(stdin);    
        
        printf("what you enter is :  \n");
        
        fputs(words,stdout);
        
        printf("\n");
        
        det(words);         
              
        
    }  while(fgets(words,L-1,stdin)!=NULL);
    
    
     return 0;    
}

void det(char *words)

{
    char *ptr;
    
    int i;
    
    for(;*words!='\0';words++)
    
    {
        if(*words!=' ') 
        
        {
            *(ptr+i)=*words;
            
            i++;
        }
        
        *(ptr+i)='\0';
        
    }
    
    printf("after delete the blank, the words is : \n");
    
    puts(ptr);
    
    printf("*********\n");
    
    
}


```

我试过了,不是前后的原因,是det函数实现的问题。函数内部变量没有初始化就用了,挂掉了