c ++终止while循环,用'|'读取数字

时间:2016-06-30 03:31:13

标签: c++ input

我目前正在编写一本关于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;
.....

显然,这仅适用于少量数字输入。是否有更好的方法可以让我输入多位数并检测是否'|'已进入?如果这似乎是基本的道歉,静态类型的语言不是我的强项。

2 个答案:

答案 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;);