Bootstrap

C++中cin如果输入的值和需要的值不匹配会发生什么情况

 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对象负责将文本转换为其他类型。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;