我目前正在编写一本关于C ++的书,我对一个非常简单的问题感到难过。
尝试编写一个包含两个整数,输出和重复的程序。
导致我问题的是该程序应该在'|'时终止进入控制台。
我试过这个:
(在while循环中)
char c;
int a, b;
cin >> c;
a = c;
if (c == '|')
break
a = c - 48;
cin >> b;
b = c;
if (c == '|')
break;
b = c - 48;
.....
显然,这仅适用于少量数字输入。是否有更好的方法可以让我输入多位数并检测是否'|'已进入?如果这似乎是基本的道歉,静态类型的语言不是我的强项。
答案 0 :(得分:0)
显而易见的方法是使用循环,并通过在阅读后(或至少尝试阅读)测试流的转换为bool来检查转换:
int i;
while (std::cin >> i) // Try to read a number
std::cout << i << "\t"; // if successful, print it out
if (std::cin.peek == '|') // check why reading a number failed.
// end of input detected
else
// invalid input detected
答案 1 :(得分:0)
我想,你应该改变你的终止条件。在这种情况下,如果您的终止条件是任何非数字输入(char,string),您可以获得预期结果(适用于整数范围的数字输入)。
你可以尝试这样......
...
if (!(cin >> a))
{
break;
}
if (!(cin >> b))
{
break;
}
...
//Uncomment the below two lines if you want to take more input
//cin.clear();
//cin.ignore(std::numeric_limits<int>::max(), '\n');
为了您的理解
if(!(cin&gt;&gt; vaiable))如果为true,则表示
a)输入的值不适合变量
b)变量不会受到影响
c)流仍然被打破
d)输入的值仍在缓冲区中,并将用于下一个&#34; cin&gt;&gt;变量&#34;言。
如果要处理更多输入,请执行以下操作:
a)通过cin.clear();
修复流b)用cin.ignore清除缓冲区(std :: numeric_limits :: max(),&#39; \ n&#39;);