fflush(stdin)的对错?】的更多相关文章

C和C++的标准里从来没有定义过 fflush(stdin).也许有人会说:"可是我用 fflush(stdin) 解决了这个问题,你怎么能说是错的呢?"的确,某些编译器(如VC6)支持用 fflush(stdin) 来清空输入缓冲,但是并非所有编译器都要支持这个功能(linux 下的 gcc 就不支持),因为标准中根本没有定义 fflush(stdin).MSDN 文档里也清楚地写着fflush on input stream is an extension to the C sta…
参考自linux下如何清空(刷新)stdin缓冲区 首先,fflush在C/C++/POSIX标准中只定义了处理输出流的行为,对于像stdin这种输入流,这是未定义行为undefined behavior,随便C/C++库怎么去实现都不算错.即使某个C/C++库对fflush(stdin)的处理是删除掉你硬盘上所有文件都没有错.所以你根本不要指望任何未定义行为能在不同平台下有相同的表现. 再来看看linux对fflush(stdin)的说法 代码: man 3 fflush 引用: For in…
1.fflush(stdin): 作用:清理标准输入流,把多余的未被保存的数据丢掉.. 如: int main() { int num; char str[10]; cin>>num; cout<<num<<endl; cin>>str; cout<<str<<endl; return 0; } 从stdin获得一个整数存入num,接着立马打印出来:从stdin获得一个字符串存入str,也立马打印出来.但是下面这种可能需要特别考虑:在…
在最近的刷题过程中,因为用到了很多字符串的操作,有时需要多次清空缓冲区,所以用了fflush(stdin);的语句,确实很好用,但是发现在OJ上提交后会出现runtime error的问题.当时并没有在意是fflush(stdin);的问题,调试好多次后发现会产生runtime错误的代码,于是对fflush(stdin);产生了疑心. 上网查阅资料后发现(转自https://my.oschina.net/deanzhao/blog/79790):其实C和C++的标准里从来没有定义过 fflush…
来源:http://my.oschina.net/deanzhao/blog/79790 1. 为什么 fflush(stdin) 是错的?首先请看以下程序: #include <stdio.h>int main( void ){int i; for (;;)   {      fputs("Please input an integer: ", stdout);      scanf("%d", &i);      printf("%…
转自:http://blog.csdn.net/yeyuangen/article/details/6743416 fflush(stdin)即清理标准输入流,把多余的仍未被保存的数据丢掉. fflush(stdout):清空输出缓冲区,并把缓冲区内容输出 比如,下面这个小程序: void main() { int a; char str[10]; cin>>a; cout<<a<<endl; cin>>str; cout<<str<<…
void clean_stdin(void) { int c; do { c = getchar(); } while (c != '\n' && c != EOF); }…
stdin.stdout.FILE结构体.缓冲区和fflush理解 因为之前调试代码时, printf输出的字符串总是被截断了输出(先输出部分, 再输出剩余的), 当时调试了很久, 才知道问题所在, 并用fflush函数解决了上述bug. 1. stdin和stdout是什么 它们是FILE*类型的结构体指针(所以并不是int类型的0,1,2), 只是程序默认一般打开的. man pages3中的定义: #include <stdio.h> extern FILE *stdin; extern…
转载:https://blog.csdn.net/Veniversum/article/details/62048870 对C 语言初学者来说,fflush(stdin)函数被解释为会清空输入缓冲区的一个系统函数,这是一个曾经几乎对过一半的说法,随着计算机科学的进步,在学习的过程中的逐步完善,将fflush(stdin)函数的过去与现在分析一下. Personal thinking: fflush(stdin) 会清空输入缓冲区中的内容,读取时输入缓冲区中的内容会被scanf函数逐个取走,正常c…
问题描述: 统计从键盘输入的若干个字符中有效字符的个数,以换行符作为输入结束.有效字符是指第一个空格符前面的字符,若输入字符中没有空格符,则有效字符为除了换行符之外的所有字符. 示例代码: #include<stdio.h> void main() { ,ch; printf("\nPlease input a line char: "); fflush(stdout); while((ch=getchar())!='\n') { if(ch==' ') break; co…
fflush()的作用是用来刷新缓冲区: fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃:stdin是standard input的缩写,即标准输入,一般是指键盘:标准输入缓冲区即是用来暂存从键盘输入的内容的缓冲区. fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西强制打印到标准输出设备上.standard output 的缩写,即标准输出,一般是指显示器:标准输出缓冲区即是用来暂存将要显示的内容的缓冲区. 一: #include "stdafx.h&…
int fflush(FILE *stream);If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to…
1.为什么 fflush(stdin)是错的 http://u637.springnote.com/pages/6288463.xhtml(已经bad request了) 首先请看以下程序: #include <stdio.h> int main( void ) { int i; for (;;) { fputs("Please input an integer: ", stdout); scanf("%d", &i); printf("…
本文转载自:http://blog.chinaunix.net/uid-30058258-id-5029847.html printf是一个行缓冲函数printf函数是标准函数,最终会调用到系统调用函数,printf函数会掉用到write系统函数:但是调用write函数需要满足一些条件件.(1)缓冲区满(2)遇到\n \r(3)调用fflush函数来冲洗缓冲区(4)scanf读取缓冲区的内容(5)调用printf函数的进程或线程结束会调用fflush函数检测缓冲区的大小为1024B.fflush…
1. 概述 函数名: fflush() 功 能: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时 头文件: stdio.h 原型: int fflush(FILE *stream),其中stream是要冲洗的流 2. 函数说明 fflush()会强迫将缓冲区内的数据写回参数stream 指定的文件中. 如果参数stream 为NULL,fflush()会将所有打开的文件数据更新. 3. fflush(stdout) 例子 // 例1 fflus(stdout) #include<std…
题目链接:http://poj.org/problem?id=2632 先话说昨天顺利1Y之后,直到今天下午才再出题 TAT,真是刷题计划深似海,从此AC是路人- - 本来2632是道略微恶心点的模拟,但毕竟是模拟,一般模拟都是仅仅要演示样例过了基本就AC了.但这个题非常特殊 我開始的时候一直跑不出測试演示样例.才发现题目中的插图和我构想的坐标系是不一样的(看来还不能轻易忽视掉插图啊) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZWh5cG…
/************************************************************************* > File Name: clearing.c > Author: Mr.Yang > Purpose:演示流中剩余字符的解决方法 > Created Time: 2017年05月20日 星期六 14时23分25秒 ************************************************************…
转载请保留原作者. 目录 一.stdin和stdout 1.意义 2.缓冲 2.1.scanf的缓冲问题 2.2.fflush 3.freopen 二.stderr 1.输出方法 2.默认缓冲 一.stdin和stdout 1.意义 stdin表示标准输入,stdout表示标准的输出.它们都是文件指针.默认情况下,所指向的文件是控制台. 可以使用freopen进行重定向,或者fopen新建文件指针,都是可以的. 2.缓冲 2.1.scanf的缓冲问题 #include<stdio.h> usi…
应用场景:我们使用多个scanf()的时候,如果输入缓冲区还有数据的话,那么scanf()就不会询问用户输入,而是直接就将输入缓冲区的内容拿出来用了,这就导致了前面的错误影响到后面的内容,为了隔离这种问题, 总的思想:通过各种方法将输入缓冲区的内容读出来. 方法一:使用scanf("%*[^\n]%*c"):成功; 解释: 1.这里的星号'*'表示读入某类型的内容,但是这个内容不保存到变量里,所以后面不需要对应的参量; 也就是说,只要我再%后面加入星号之后,后没可以不放置接收的变量.…
    int i = 0; while (flag) { printf("please input a number >>> "); scanf("%d", &i);//输入一个字符或字符串的时候死循环 printf("%d\n", i); }   以上直接返回一串0........死循环   当scanf输入类型不匹配的时候,返回一个0值,但是之前输入的字符仍旧在缓冲区里面,所以解决方式也比较容易,在代码中加入ffl…
哈夫曼树 哈夫曼树也叫最优二叉树(哈夫曼树) 问题:什么是哈夫曼树? 例:将学生的百分制成绩转换为五分制成绩:≥90 分: A,80-89分: B,70-79分: C,60-69分: D,<60分: E. if (a < 60){ b = 'E'; } else if (a < 70) { b = ‘D’; } else if (a<80) { b = ‘C’; } else if (a<90){ b = ‘B’; } else { b = ‘A’; } 判别树:用于描述分类…
0. 文件操作相关函数 1.  文件分为字符方式读写,字节方式(二进制方式)读写 fprintf / fscanf FILE * file; //全局定义 void save(Book books[]){ int i; if((file = fopen(PATH,FW))==NULL){ printf("文件保存失败,请检查文件是否存在!"); return; } ;i<cnt;i++){ fprintf(file,"%05ld %s %s %s %s %s %.2f…
#cin的使用问题 cin输入类型不匹配的情况: #include<iostream> using namespace std; void main() { int i = 0; while(i<4) { int nNumb; cin >> nNumb; //如果再输入的时候输入字符串类型例如"Hello",则下次进入循环时遇到cin是不会阻塞 ++i; } return; 原因: 这是由于cin在接受键盘的缓存时由于接收的类型与变量类型不符,它会返回一个…
前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下我们的用户名,并不能直接查看flag这个文件.查看passcode.c的源码看一下 #include <stdio.h> #include <stdlib.h> void login(){ int passcode1; int passcode2; printf("enter…
一.循环输入 #include "stdio.h" void main() { char c; do { printf("我告诉你1+1=2\n"); printf("你相信吗?(y/n)"); c=getchar(); fflush(stdin); }while(c=='n'); } 二.输入行与列显示矩形 #include "stdio.h" void main() { int row,col,i,j; char c; d…
一.计算15+16+17 …98+99的和 for实现 #include "stdio.h" void main() { //15+16+17 …98+99 ; ;i<=;i++) { s=s+i; } printf("%d \n",s); } 二.计算15+16+17 …98+99的和 while实现 /* Note:Your choice is C IDE */ #include "stdio.h" void main() { ,s=;…
一.输入语文,数学成绩,根据平均分分3档 #include "stdio.h" void main() { //接受用户输入 float chinese,math,avg; printf("请输入语文成绩:"); scanf("%f",&chinese); printf("请输入数学成绩:"); scanf("%f",&math); //判断输入是否正确 &&chinese&…
一.数据类型简介 在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统.变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式. 类型转换: 类型 存储大小 值范围 char 1 字节 -128 到 127 或 0 到 255 unsigned char 1 字节 0 到 255 signed char 1 字节 -128 到 127 int 2 或 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 unsi…
1.程序执行修改窗口字体颜色命令: 2.程序执行修改窗口标题命令: 3.程序执行关机倒计时命令: 4.根据提示输入团队名称JYHACK TEAM 根据提示输入团队网址:http://bbs.jyhack.com 5.如果输入正确,则取消关机命令,并打开某一网页.    如果输入错误,那就等着关机吧. ps:当然对于略懂cmd命令的来说很简单,打开cmd,输入shutdown -a命令即可轻易解除. 源码如下: #include<stdio.h> //printf和scanf函数调用 #incl…
最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻的感觉.我自己就是这样,比方说看进程间通信信号量章 节的时候,开始感觉就很迷糊,因此也就想在这里写一些文字,给和我一样的草鞋分享一些自己的学习经历(算不上经验吧). 环境:   windows7,  VMware  9.0 操作系统版本: RHEL  5.5   内核版本:  2.6.18-194.el5 G…