C/C++缓冲区的刷新问题
2015-07-14 17:24
155 查看
c/c++语言平常写程序的时候我们经常会遇到这样的情况,本来直接输入的是这样的数据,然而在读取输出的时候却不是我们输入时的数据。这是为什么呢? 原因就是我们在输入的时候留下了垃圾,而我们定义的某个变量接受的数据正是“垃圾”而不是我们想要的数据。总结一下C、C++中清除垃圾的方法:
这里写代码片 #include<stdio.h> #include<stdlib.h> /* //1. int main() { int i; char ch; scanf("%d",&i); fflush(stdin); scanf("%c",&ch); printf("i=%d,ch=%d\n",i,ch); system("pause"); return 0; } */ /* //2. int main() { int i; char ch; scanf("%d",&i); getchar();//如果没有getchar();则ch接受的数据将会是输入时留下的垃圾 //空格或者是回车;在这里相当必要!!! scanf("%c",&ch); printf("i=%d,ch=%d\n",i,ch); system("pause"); return 0; } */ //3. //%*nc; n的值是可以根据而要而改变的,表示的是 吸收的字符的个数。用法和 getchar()相像,只不过它可以很方便的改变吸收的字符的个数。 //例: #include<stdio.h> int main() { char ch; int i; scanf("%d",&i); scanf("%*c%c",&ch);// 如果没有 %*c 输出的ch是“垃圾”,加上后就正确了 printf("i=%d,ch=%d\n",i,ch); system("pause"); return 0; } /* int main(void); { int a,b,c; printf("输入a,b,c\n"); scanf("%d%d%d",&a,&b,&c); //&a,&b,&c中的&是地址运算符,&a指a在内存中的地址。scanf的作用是:按照a,b,c的内存地址将输入的数据存到a,b,c中去。变量a,b,c的地址是在编译连续阶段分配的(存储顺序由编译器决定)。 //这里注意:如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以加逗号,只能是空格或tab键或者回车键——“2 3 4” 或 “2(按tab)3(按tab)4(按tab)”。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”. printf("a=%d,b=%d,c=%d\n",a,b,c); fflush(stdin); system("pause"); return 0; } */
相关文章推荐
- C++ 中的运算符重载
- c++ try throw简单例子
- 黑马程序员------C语言中变量的概念,初始化和引用以及作用域
- 大顶堆(c++实现)
- C++的Json解析库:jsoncpp
- C++ 布线问题,分支限界法
- c++builder 解压缩
- C语言文件操作函数大全(超详细)
- C/C++/Fortran混合编程浅谈------直接链接方式
- 为什么设计模式在C++社区没有Java社区流行?
- qt 创建纯c++ 工程, 不依赖qt库
- C/C++内存泄漏及检测
- [转载]总结:C++与Fortran的混合编程问题
- C++学习之枚举
- c++顺序容器之array
- c++ STL queue 内存布局简析
- C++ primer 5 笔记3 chapter 2 变量和基本类型(2.4~2.6)
- C++函数队列 BFS的好帮手
- 黑马程序员------C语言中常量的分类及其表示方法
- C++求解最大子矩阵之和