yuchu3d 2021-12-06 10:42 采纳率: 82.8%
浏览 50
已结题

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");
    
    
}


```

  • 写回答

1条回答 默认 最新

  • togolife 2021-12-06 12:28
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 修改了问题 12月6日
  • 创建了问题 12月6日

悬赏问题

  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。
  • ¥20 CST怎么把天线放在座椅环境中并仿真