您的位置:首页 > 编程语言 > C语言/C++

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;
}
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: