0

你好。我在尝试执行的一段代码时遇到了构建问题。我是 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 >> input)=='a')”运算符'=='有问题

4

5 回答 5

7

您遇到的问题是表达式cin >> input不会“返回”键入的字符,而是cin作为istream&对象返回。

您的直接解决方法是:

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

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

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

for( int i = 0; i != 100; ++i )
于 2013-08-01T11:58:15.243 回答
3

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

像这样改变循环:

for(i = 1; i <= 100; ++i)
{
    cin >> input;
    if( input == 'a')
    {
        break;
    }
}
于 2013-08-01T11:57:46.747 回答
1

尝试

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

        ...

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

于 2013-08-01T11:59:26.440 回答
0

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

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

string input;
getline(cin, input);
if(input == "a")
{
    break;
}
于 2013-08-01T12:17:18.363 回答
0

运算符 >> 不返回读取的字符,而是对 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用作数组的索引)。另请注意,您不应该i在 for 循环之外定义:在 C++ 中,尽可能将变量范围保持在本地,它将保护您免受许多复制和粘贴错误的影响。

于 2013-08-01T11:57:19.353 回答