C ++:对循环进行故障排除

时间:2013-08-01 11:54:33

标签: c++ loops operators

您好。我正在尝试执行一段代码的构建问题。我是C ++的新手,我正试图解决它,所以这个问题可能非常简单。我真的很感激任何人都可以帮助我。这是代码;

#include <iostream>
using namespace std;

int i = 0;
char input = ' ';

int main()
{
    for(i = 1; i <= 100; ++i)
    {
        if((cin >> input) == 'a')
        {
            break;
        }
    }
    return 0;
}

问题在于“if((cin&gt;&gt; input)=='a')” 运算符'=='

有问题

5 个答案:

答案 0 :(得分:7)

您遇到的问题是表达式cin >> input没有“返回”输入的字符,它会将cin作为istream&对象返回。

直接解决方法是:

if( ( cin >> input ) && ( input == 'a' ) )
{
    break;
}

检查cin >> input的原因是防御性的:如果由于任何原因无法读取istream,它将变为无效。

简单来说,C ++中的循环通常基于零,并且最好限制i变量的范围:

for( int i = 0; i != 100; ++i )

答案 1 :(得分:3)

表达式(cin >> input)返回对cin的引用,这永远不会等于'a'。

像这样改变循环:

for(i = 1; i <= 100; ++i)
{
    cin >> input;
    if( input == 'a')
    {
        break;
    }
}

答案 2 :(得分:1)

尝试

    for(i = 1; i <= 100; ++i)
    {
       cin >> input;
       if(input == 'a')
       {
          break;

        ...

代替。当ares时,iostream(cin)将输入存储在输入中;或者结束;)

答案 3 :(得分:0)

运营商&gt;&gt;不返回读取的字符,而是返回istream本身的引用。

你必须这样做:

for(i = 1; i <= 100; ++i) {
    cin >> input;
    if (input == 'a') {
        break;
    }
}

您还可以保持条件if (cin >> input)以检查您的istream是否仍处于“良好状态”,如果它已正确读取,但我无法看到读取char是如何使cin失败的。无论如何,在所有其他必须从输入流中读取的情况下,这是一种很好的做法。

同样使用for(int i = 0; i < 100; ++i)代替for(i = 1; i <= 100; ++i)通常更有用(例如,您必须使用i作为数组的索引)。另请注意,您不应在for循环之外定义i:在C ++中,尽可能将变量范围保持为本地范围,它将保护您免受许多副本和粘贴错误。

答案 4 :(得分:0)

提出另一种检索输入数据的方法:

std :: getline()允许您检索用户输入的内容,包括句子和字符串对象。所以这个解决方案往往更灵活。

string input;
getline(cin, input);
if(input == "a")
{
    break;
}