C++ cin的用法

来源:百度知道 编辑:UC知道 时间:2024/06/10 17:36:47
1。下面的程序,我想实现这样的功能:输入合法的数字即可退出,输入错误则重新输入。
#include <iostream>
using namespace std;
int main()
{ int a;
while(!(cin>>a))
{cout<<"Error!Input again!"<<endl;}
return 0;
}
若输入的是数字,程序能退出。可是当输入字符的时候,就会不断地输出Error!Input again!
进入了死循环。请问为什么会这样。要怎么才能解决。
加了continue语句仍然是那样

其实是这样的,我本来的程序是要根据用户输入的选项来进行调用某些函数的,选择只有1.2.3.4这样。我想。如果用户输入了字母或其他的字符,那么程序就不能正常运行了。所以,如果用户输入了字符的话,则重新输入数据

3楼的,其实我是想输入错误就提出,并不退出
4楼的,你的结果可以用,可是我想知道的使为什么我原来的用法不行。这才是最重要的.
5楼的方案也行,不过我正的想知道为什么原来我的那个不行(补基础)。

cin的缓存,你读取失败后,缓存内的内容不变,当你再次读取时,你读去的还是原来的内容,所以再次出错,而导致死循环
附程序:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int a;
while(!(cin>>a))
{
cout<<"Error!Input again!"<<endl;
cin.clear(); //清除错误标志位
std::string t;
std::getline(cin,t); //将当前行从缓存中取出
//cin>>t; //将下一空格前的所有字符取出
/*或者 char t;
cin.get(t);
*/
}
return 0;
}

cin>>a;键盘读入数据赋值给a;

cin:C++编程语言互换流中的标准输入流,需要iostream.h支持,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。

//例如:
# include<iostream>
using namespace std;
int main(void)
{
    int a; 
    cout<<"请输入一个数字,按回车结束"<<endl;
 &nbs