C/C++缓冲区的刷新问题

来源:互联网 发布:废品收购源码整站程序 编辑:程序博客网 时间:2024/05/21 06:31

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”,则在输入数据时需要加“,”,如“234”.printf("a=%d,b=%d,c=%d\n",a,b,c);fflush(stdin);system("pause");return 0;}*/
0 0
原创粉丝点击