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

C++: troubleshooting a loop

本文关键字:故障 排除 循环 C++      更新时间:2023-10-16

你好。我试图执行的一段代码出现了构建问题。我是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>>输入)=='a')"操作员"=="有问题

问题是表达式cin >> input不会"返回"键入的字符,而是将cin作为istream&对象返回。

对你来说,直接的解决方案是:

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

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

需要注意的是,C++中的循环通常是基于零的,最好限制i变量的范围:

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

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

像这样改变循环:

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

尝试

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

相反。iostream(cin)在存在时将输入存储在input中;或结束线;)

运算符>>不返回已读取的字符,而是对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++中,尽可能地将变量范围保持在本地,这将保护您免受许多复制&粘贴错误。

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

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

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