清空输入缓冲区

/*
清空输入缓冲区
cin.clear():清除错误标记,比如要求输入int型,但我们输入了char型,就会导致输入错误,产生错误标记
cin.sync():清空输入缓冲区
cin.ignore(n,ch): 第一个参数是清空输入缓冲区的大小,第二个参数是终止字符(注:终止字符也会被丢弃),常用形式有以下两种:
cin.ignore(1024,‘\n‘)
cin.ignore(numeric_limits<streamsize>::max(),‘\n‘)  //此时需要包含头文件<limits>
注:
1.如果碰到EOF,ignore()函数也会结束
2.如果错误标记没有被清除,则即使清除了输入流依然无法进行输入,因此清除错误标记和清除输入缓冲区要结合使用
*/
#include <iostream>
#include <limits>
using namespace std;
int main()
{
int a;
cout<<"输入一个字母:"<<endl;
cin>>a;                    //int型变量中放了一个char型数据,输入流处于错误状态
cout<<"输入一个数字:"<<endl;
cin>>a;                 //由于输入流处于错误状态,因此无法进行输入
cout<<a<<endl;             //输出不确定值

cin.clear();                //清除错误标记
cin.sync();               //清除输入缓冲区
cout<<"输入一个数字:"<<endl;
cin>>a;
cout<<a<<endl;
return 0;
}

时间: 2024-10-06 14:58:39

清空输入缓冲区的相关文章

c语言:C语言清空输入缓冲区在标准输入(stdin)情况下的使用

C语言清空输入缓冲区在标准输入(stdin)情况下的使用 程序1: //功能:先输入一个数字,再输入一个字符,输出hello bit #include <stdio.h> int main() { int num = 0; char ch = ' '; scanf("%d", &num); scanf("%c", &ch); printf("hello bit\n"); system("pause"

vs2019清空输入缓冲区

发现用cin.sync()在vs2019中不能清空输入缓冲区,以前的vs版本没试过,我看别人在vc中用cin.sync()可以清除,估计是IDE的问题..以下是我学习C++四个多月写的一整段代码 运行结果表明输入缓冲区没有清除掉, 找到问题所在 然后试着把cin.sync()改为cin.ignore(),程序流程正常,没有翻车. 原文地址:https://www.cnblogs.com/YLJ666/p/12305404.html

C语言清空输入缓冲区的N种方法对比(转)

C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); //获取行系列 char *fgets(char * restrict s, int n, FILE * restrict stream); char *gets(char *s);//可能导致溢出,用fgets代替之. //格式化输入系列 int fscanf(FILE * restrict stream, co

scanf()中清除输入缓冲区的几种方法归纳

应用场景:我们使用多个scanf()的时候,如果输入缓冲区还有数据的话,那么scanf()就不会询问用户输入,而是直接就将输入缓冲区的内容拿出来用了,这就导致了前面的错误影响到后面的内容,为了隔离这种问题, 总的思想:通过各种方法将输入缓冲区的内容读出来. 方法一:使用scanf("%*[^\n]%*c"):成功; 解释: 1.这里的星号'*'表示读入某类型的内容,但是这个内容不保存到变量里,所以后面不需要对应的参量; 也就是说,只要我再%后面加入星号之后,后没可以不放置接收的变量.

c++清除输入缓冲区之 sync() vs ignore()

最近在写程序的时候总是不注意输入缓冲区内是否还有东西,导致出现了一些异常,调试了半天.所以来上一贴,学习注意,引以为戒! http://blog.chinaunix.net/uid-21254310-id-1828906.html sync()函数 和ignore()函数都是用于清除输入缓冲区的内容的. #include<unistd.h>    void sync(void)                                                         清除

【学习笔记】关于输入缓冲区。一个不规范的字符赋值语句引发的讨论

1.这种赋值语句是我练习时写的错误代码,它不符合规范,是实际写代码的时候,不应该出现的.只是结果碰巧"正确",因此拿出来讨论. 2.因此这篇笔记对实际代码能力的提升并没有太大帮助. 下面这段代码,4个printf语句的输出结果分别为多少? #include<stdio.h> int main() { char *a = 'abc' ; char b = 'abc' ; printf( "%s\n", &a);      //c printf( &

C或C++输入缓冲区问题

当需要在控制台上输入多行时,特别是字符时,容易出现缓冲区的问题 如getchar() getline() 我的解决办法是:在C中刷新下输入缓冲区fflush(stdin) 如下面这个例子: (1)我需要在一行输入个数n,然后在下面每一行输入一个字符 1 #include<stdlib.h> 2 #include<stdio.h> 3 #include<string.h> 4 5 int main() 6 { 7 int n; 8 char str[10]; 9 int

C语言清空输入缓存区的几个方法

办法一: 1 scanf("%d", value); 2 setbuf(stdin, NULL); 将 stdin 输入流由默认缓冲区转为无缓冲区.这样 scanf() 输入完毕后,缓冲区内的东西就消失了. 办法二: 1 while ((c = getchar()) != EOF && c != '\n'); 使用 getchar() 不断获得缓冲区内的内容,直到缓冲区空为止.建议使用这种方法. 办法三: 1 fflush(stdin); 这种方法不在C和C++标准定义

输入缓冲区的问题1

1 #include <stdio.h> 2 int main(void) 3 { 4 int a; 5 char c; 6 7 scanf("%d", &a); 8 c = getchar(); 9 putchar(c); 10 11 return 0; 12 } 输入1,然后回车 整数1读入到变量a中,回车字符'\n'读入到c中. 原文地址:https://www.cnblogs.com/2018jason/p/12204089.html