2 yanbqcsdn yanbqcsdn 于 2016.09.25 20:09 提问

C++ 清空输入缓存区的问题 初学 麻烦各位
 #include <iostream>
using namespace std;
int main(void)
{
    int temp = -1;
    while (   !(cin >> temp)    ||   (temp > 3 || temp < 1)  )
    {
        cout << "请输入一个1-3的数字并用回车键来确定" << endl;
        cout << "1.销售部门\t" << "2.研发部门\t" << "3.财务部门" << endl;
        if(cin.fail()) cin.clear();
        cin.sync();
    }
}

代码如上. 按理说输入一个非数字应该会清空输入缓冲区后提示我再次输入才对.. 但是变成了死循环. 初学者 麻烦各位帮帮看看 感激不尽

2个回答

uVarAndMethod
uVarAndMethod   2016.09.25 23:05

#include
using namespace std;
int main(void)
{
int temp = -1;
while ( !(cin >> temp) || (temp > 3 || temp < 1) )
{
cout << "请输入一个1-3的数字并用回车键来确定" << endl;
cout << "1.销售部门\t" << "2.研发部门\t" << "3.财务部门" << endl;
if(cin.fail())
{
cin.clear();
// cin.sync();
while(cin.get()!='\n')
continue;
}
}
}

uVarAndMethod
uVarAndMethod   2016.09.25 23:05

头文件处自己处理下, 代码已测试成功

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
文件操作——清空缓冲区
在进行输入输出操作或者文件读写时,由于涉及到缓冲区的使用,可能遇到一些问题。   例如,scanf()函数用于从stdin输入信息,在从标准输入缓冲区读取信息时,往往以'\n'作为结束输入的标志,但是换行符'\n'仍然残留在缓冲区中,下次再次从标准输入读取信息时,残留的换行符'\n'会被当做有效信息读取,即,上一次的输入影响了下一次的输入。   再例如,通过 printf()函数向标准输出打印信息时
C语言 清空输入缓冲区的方法
问题描述:#include void main(){ int a; char b; printf("input a integer\n"); scanf("%d",&a); //这里需要清除回车符 printf("input a char\n"); scanf("%c",&b); printf("%d,%c\n",a,b); } 想要得到的输出结果: input a in
Linux程序设计 清空标准输入缓冲区
今天在Linux程序设计的时候需要清空标准输入缓冲区,于是使用了如下Windows程序设计中的方法: 1.fflush(stdin);这个fflush()函数根本不是标准C中的函数,只是标准C的扩展,所以在Linux中使用根本不行; 2.中网上搜索了下,发现有网友建议使用rewind(stdin);这个函数其实是将指针指向流的开始处。但是它是文件操作中的一个函数,操作的是FILE型流,
C语言清空输入缓冲区
先来看一段代码: #include int main() { int num; char ch ; scanf("%d", &num); scanf("%c", &ch); printf("hello world\n"); system("pause"); return 0; } 设想输入一个数字和一个字母,应该出现如下情况 1 a hello
Linux下标准缓冲区的清空
当我们在使用scanf()函数读取标准输入时,其结果并不总是正确。有时,为了防止缓冲区数据对结果的影响,我们需要清空标准缓冲区。首先我们得知道在LINUX下标准I/O为我们提供了那几中类型的缓冲区。 标准I/O库提供了3种类型的缓冲。 1.全缓冲:在这种情况下,只有在填满缓冲区后才进行实际的I/O操作。 2.行缓冲区:当输入和输出遇到换行符时,标准I/O库才进行实际的I/O操作。 3.
scanf()中清除输入缓冲区的几种方法归纳
又重新过一遍C语言,感觉每次重学C语言都有不同的感受,遇到了一个问题,就是scanf()这个问题,其实细究起来,也有很多可以值得深挖的,实际上每次细细的挖掘的话,都是对C语言的更透彻的认识. 那么下面我就对scanf()中清除输入缓冲区的几种方法归纳: 应用场景:我们使用多个scanf()的时候,如果输入缓冲区还有数据的话,那么scanf()就不会询问用户输入,而是直接就将输入缓冲区的内容拿出
C语言之清空缓存区
在C语言中,我们常常需要去清空缓存区,对于缓存区清空的重要性,接下来我们进行具体的说明。 首先我们先解释一下缓存区。1.缓存区C语言中的缓冲区又称为缓存,它是内存空间的一部分。   也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。     C语缓冲区分为三种类型:1、全缓冲 2、行缓冲 3、不带缓冲。   缓冲区根据其对应的是输
C 清空文件缓冲区
C语言fflush()函数:清空文件缓冲区(或标准输入输出缓冲区) 转自:http://c.biancheng.net/cpp/html/2506.html 头文件:#include fflush()不是标准库文件,经笔者测试,VC6.0完美支持,GCC(GCC4.6.2)不支持。 fflush()用于清空文件缓冲区,如果文件是以写的方式打开 的,则把缓冲区内容写入文件
【C语言】scanf,fgets,fputs缓冲区问题
1 为什么输入回车后,程序就开始运行了? scanf仅在每一个数据域均有数据,并按回车后结束,程序继续运行。 因为scanf函数规定:在scanf函数接收数据时,遇到以下情况之一则结束一个数据的输入,   (1) 遇到空格、回车、跳格键 (2)遇到宽度结束  (3)遇到非法输入 2 在用%d控制字符输入数据时,系统会忽略掉空白字符,    在用%c控制字符输入数据时,系统不会忽略,而
Linux下如何清空输入缓冲区
今天在Linux下编写数据结构课程的一个旅游管理程序时,遇到了一些有关键盘输入缓冲区的问题。 使用scanf函数进行等待用户输入时,用户输入完会在缓冲区里遗留一个换行符 '\n',如果不清除掉这个换行符,就会在下一次的scanf中被作为输入,直接跳过,不会等待用户的输入,所以,一般在调用scanf后一定要清除缓冲区。 开始,我使用 fflush(stdin) 进行清空,因为在Windows