fflush(stdin)和fflush(stdout)【转】

2024-05-24 17:08
文章标签 stdin stdout fflush

本文主要是介绍fflush(stdin)和fflush(stdout)【转】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

fflush(stdin)比较容易理解,即清理标准输入流,把多余的仍未被保存的数据丢掉。

比如,下面这个小程序:

void main()

{

        int a;

        char str[10];

        cin>>a;

        cout<<a<<endl;

        cin>>str;

        cout<<str<<endl;

}

目地很简单:从stdin获得一个整数存入a,接着立马打印出来;从stdin获得一个字符串存入str,也立马打印出来。但是下面这种可能需要特别考虑:在首行输入了两个整数,在cin>>a之后,stdin缓冲还有一个整数没被读取。接下来,不等输入字符串,就直接把上面多出来的数字存入到str中去并打印。

某种程度上这是操作不规范造成的,但是程序应该要有健壮性,程序员应该提前预防这种不规范的操作。可以在程序界面上提示“请输入1个整数”,甚至有时候不厌其烦的强调和警告也必要。当然,本例为求简单,并不在UI友好方面做文章。这时,可以在cin>>str语句前插入fflush(stdin),如此一来就可以清空标准输入缓冲里多余的数据。

fflush(stdout)跟fflush(stdin)类似,是对标准输出流的清理,但是它并不是把数据丢掉,而是及时地打印数据到屏幕上。为了更好的理解它,需要知道一个事实:标准输出是以『行』为单位进行的,也即碰到\n才打印数据到屏幕。这就可能造成延时,如下面这几行代码:

int a;

printf_s("input one number:");

fflush(stdout);\\#1

scanf_s("%d",&a);

如果没有#1那行代码,在某些平台上就可能迟迟看不到"input one number"被打印到屏幕上来,因为它没有回车。这时候,fflush(stdout)就起到及时输出的作用。

但是在Windows平台上,似乎并看不出差别来。也即MSFT已经将stdout的输出改成及时生效了。

fflush函数被广泛使用在多线程、网络编程的消息处理中。

fflush(stdout):清空输出缓冲区,并把缓冲区内容输出

这篇关于fflush(stdin)和fflush(stdout)【转】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/999015

相关文章

将标准输入stdin转换成命令行参数——Unix中的xargs指令

xargs是Unix中的复合指令加工机,联合管道符“|”将制造更加强大的“复杂”指令组合。 (笔记模板由python脚本于2024年08月22日 18:13:51创建,本篇笔记适合喜欢Linux的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教

关于输入输出(stdin、stdout、stderr)

启动一个C语言程序时,操作系统环境负责打开三个文件,并将这3个文件的指针提供给该程序。这3个文件分别为标准输入(stdin)、标准输出(stdout)、标准错误(stderr)。它们在<stdio.h>中声明,大多数环境中,stdin指向键盘,stdout、stderr指向显示器。之所以使用stderr,若因某种原因造成其中一个文件无法访问,相应的诊断信息要在该链接的输出的末尾才能打印出来。当输出

gzip: stdin: unexpected end of file tar: Unexpected EOF in archive tar: Unexpected EOF in archive ta

今天解压tar包遇到这样一个问题 使用命令:tar -zxvf  xxxxx.tar.gz gzip: stdin: unexpected end of file tar: Unexpected EOF in archive tar: Unexpected EOF in archive tar: Error is not recoverable: exiting now

Spark错误异常-stdout日志乱码

采用Apache版本Spark1.2.1时没有出现乱码,但Spark-1.1.0-cdh5.2.1版本中,在分布处理的map函数里对中文数据进行debug打印输出进行时出现问号乱码 val rs = rdd.filter(e => {val (lable,text) = (e._2(2), e._2(3)); m.filterItem(lable, text) }).redu

linux中passwd --stdin命令含义

linux中passwd --stdin命令的含义 在linux系统中,我们知道passwd是用来修改用户密码的命令。而--stdin是passwd命令的一个选项,用于从标准输入中读取密码。具体来说,使用passwd --stdin可以将标准输入中的内容作为新密码,通过管道传递给passwd命令,从而修改用户的密码。 [root@elasticsearch ~]# passwd --help |

牛客网笔试sys.stdin参考

测试方法 创建.txt文件,输入测试内容;将sys.stdin()重定向至改文件; 例如 ‘111.txt’ 3 1 2 3 4 5 6 7 8 9 import syssys.stdin = open('111.txt')k = int(sys.stdin.readline().strip())data = []for i in range(k):data.append(list

C:STDIN_FILENO和stdin的区别

1.STDIN_FILENO定义于文件/usr/include/unistd.h #define    STDIN_FILENO        0    /* Standard input.  */ #define    STDOUT_FILENO    1    /* Standard output.  */ #define    STDERR_FILENO    2    /* Stand

三十六 fflush(stdout);

#include <stdio.h> #include <pthread.h> #include <unistd.h>   void *fuc() { printf("hehe\n"); // 没有\n 没有fflush   5个“hehe”将在最后程序结束时打印 fflush(stdout); }   int main() { int i; for(i=0;i<5;i+

linux中stdout,stdin,stderr

stdout, stdin, stderr的中文名字分别是标准输出,标准输入和标准错误。     在Linux下,当一个用户进程被创建的时候,系统会自动为该进程创建三个数据流,也就是题目中所提到的这三个。那么什么是数据流呢(stream)?我们知道,一个程序要运行,需要有输入、输出,如果出错,还要能表现出自身的错误。这是就要从某个地方读入数据、将数据输出到某个地方,这就够成了数据流。

用Eclipse编写Java时调用algs4.jar和stdlib.jar解决StdOut和StdIn无法被识别的问题

前提:为了最终解决这个问题我走了太多弯路,浪费了大把的时间... 看到网上自称菜鸟如何如何,最终解决了这个问题,而我尝试完依旧无解时,意识到:按照这个说法,我TM连菜鸟都算不上...(别理我,让我哭会(┬_┬)) 先说说我的情况:在看谢路云翻译的《算法》第一章时,想完整运行其中的代码,怎奈前不久刚看完《java核心技术》的基础部分的我并没有调用过外部包的经历... 好嘛,痛苦的过程就此开