C++ 中,cin 是标准输入流对象,可以输入多种类型的数据。cin 可以输入整数、浮点数、字符等基本数据类型。cin 还可以输入字符串类型的数据。
假设要编写一个将一系列数字数组中的程序,可以利用cin输入
例如:
int n;
cin>>n;
那如果用户输入的是一个单词,而不是数字,这种输入的值和所需要的值不匹配会发生什么情况呢
书上说的有以下几种:
1)n的值操持不变
2)不匹配的输入将被留在队列里
3)cin对象中的一个错误标志被设置
如果输入不能正确的转换为所需的数据类型,cin会设置为failbit。
当输入不匹配时,cin 会设置错误状态标志。主要有以下几种标志:
failbit
:如果输入不能正确地转换为所需的数据类型,cin 会设置 failbit
。例如,期望输入一个整数,但用户输入了一个字母。
badbit
:如果输入流出现严重错误,如硬件故障或无法访问的输入设备,cin 会设置 badbit
。这种情况相对较少见,通常是由于外部因素导致的输入问题。
eofbit
:当到达输入流的末尾时,cin 会设置 eofbit
。例如,在从文件读取数据时,如果到达文件末尾,就会设置这个标志。但单纯因为输入值不匹配一般不会设置 eofbit
。
4)对cin的方法调用将返回false(如果被转换为bool类型)
cin如果错误状态被设置,后续对cin的使用肯能会受到影响:
1.直接使用cin进行后续输入可能会失败。例如,如果第一次输入不匹配导致failbit被设置,接着再次使用cin>>val;可能不会成功读取数据,二十保持变量的原始值不变。
2,入宫再循环中使用cin,错误状态可能导致循环无法正常进行。
例如:
int num;
while(cin>>num)
{
/********/
}
输入不匹配,循环将终止,因为 cin 的返回值在错误状态下为 false
。
程序发现输入的内容和要求的内容不匹配时,应采取以下操作
1)重置cin以接受新的输入
2)删除错误输入
3)提示用户再输入
for(int i=0;i<5;i++)
{
while(!(cin>>value[i]))
{
cin.clear();//重置cin以接受新的输入
while(cin.get()!= '\n')
{
continue; //删除错误输入
}
cout>>"Please enter a number";//提示用户再输入
}
}
使用cin输入时,程序将输入视为一系列的字节,其中每个字节都被解释为字符编码。不管目标类型是什么,输入一开始都是字符数据---文本数据。最后cin对象负责将文本转换为其他类型。