今天做到一个输入数据是这样的毒瘤题目:
用cin读取到int中,一旦读到'x'就会使得cin进入错误状态,之后就再也不能读取内容了.
放上解决方案:
int t; cin >> t; if (!cin.good()) { getchar(); cin.clear(); G[i][j] = 1000000000; // x 表示的情况 } else G[i][j] = t;
使用cin.good()可以检查cin是否(因为读取了'x')进入错误状态,如果是(此时cin.good()将返回false),那么用getchar()吃掉输入流中的'x',然后使用cin.clear()将cin状态复位,之后就可以继续正常使用cin了.
一开始看到网上的方法用到了cin.sync(),这个函数会清空输入缓冲区,以上面数据中的最后一行为例:
10 x x 10
效果是读到第一个'x'后,如果调用cin.sync(),会丢弃之后的"x 10".
另一种方法:使用atio函数.
参见别人的博客.https://blog.csdn.net/queque_heiya/article/details/103780672