C语言缓冲区问题

今天写了一个简单的输入输出C语言程序:

#include <stdio.h>

int main()
{
    //setvbuf(stdout,NULL,_IONBF,0);
    char str[20];
    printf("aha?");
    //fflush(stdout);
    scanf("%s",&str);
    printf("%s",str);
}

然后我用Git的命令行界面编译并执行:

GIT CLI编译运行

执行的结果是,这东西不打印,等我输入完一起打印。

后来我发现是第一句printf并没有刷新缓冲区!
解决方案:

  • 在程序的第一行设置缓冲区为0
    setvbuf(stdout,NULL,_IONBF,0);
  • 手动刷新缓冲区
    fflush(stdout)

但是我想,我以前没遇到啊,我看有人说这是windows和linux的区别??
于是我打开windows的命令行试了一下,根本不需要手动刷新的!
这个程序正常运行~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,243评论 2 33
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,643评论 9 467
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,027评论 19 139
  • 『月晦』 八月的夜晚,伴随着清凉的晚风,已经没了白天时的闷热感。 吃过晚饭,奶奶总是会习惯性地从井里打一桶水拎上房...
    禾二萌阅读 3,185评论 53 111
  • Case Class 当要定义复杂的数据类型时,可以使用Case classes。如下面所示,定义一个JSON数据...
    pangolulu阅读 607评论 0 1