c++中给一个int型变量a(初始化为1)赋字符b,输出a处理时是怎样的过程

然后接着上面的程序输入另一个int型变量b(初始化为2)。再输出b。结果是a输出为1,b的输入语句就像是没执行,输出为2。能给我解释一下这两个过程的原理吗?

第1个回答  2018-09-27
给代码,这样说太抽象了。追问

好了,放上去图片了,我不懂其中原理。

追答

cin>>a等待你输入一个整数,结果你输入一个b,导致cin失败。cout>b时由于cin流处于失败状态,不做任何事情直接返回。cout<<b输出b的初值2。

追问

那么cin处于失败状态,以后所有cin都是直接返回是吗?再者,关于这种问题怎么改善,包括两个方面,一个是考虑输入前,可以怎么编写,二是考虑用户输入错误后,怎么做让后面的正常运行呢。这两种都能给我说下吗?

追答

用户输入前做不了什么,因为你不知道用户会输入什么东西。

用户如果输入了不合法的数据导致cin流失败:

    可以检测cin是否失败:if(cin),如果cin失败将返回false。

    cin.clear()清除标志位。cin共有三个错误标志位:failbit、badbit和eofbit,分别表示不同的错误状态,只要其中有一个标志位是1,cin就是失败状态,if(cin)将返回false。cin流在失败状态下不可读取数据。使用cin.clear(),可以将这三个bit都置为0,cin重新回到正常状态,可以再次读取数据。

    cin.sync()清空缓冲区。即使使用cin.clear()重置了cin状态,下次cin>>b时仍然会失败,为什么?因为上次cin没能成功读取数据,字符b仍然留在输入缓冲区中;重置cin后再次读取,cin又会尝试从输入缓冲区中读取b,结果导致再次失败。此时必须使用cin.sync()清空缓冲区中所有内容,才能正常输入数据。

追问

谢谢你

本回答被提问者采纳
相似回答