首页 > 解决方案 > 未显示匹配运算符

问题描述

打印第 17 行的值时遇到问题。请帮我解决问题

#include<bits/stdc++.h>
using namespace std;

int main()
{
     int t;
    cin>>t;
    while(t--)
    {
         int a,b,i;
        cin>>a>>b;
        int count=0;
        for(i=9;i<=b;i*10+9)
        {
            count++;
        }
    }

  cout<<count;
    return 0;
}

标签: c++

解决方案


您在循环中声明的count变量在while您尝试打印它时不再在范围内。

范围内是功能std::count。这就是为什么你会得到一个错误

error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and '<unresolved overloaded function type>')

代替

error: 'count' was not declared in this scope

这是您不应该使用的另一个原因using namespace std。没有它就不会出现这种模棱两可的情况。


与您实际提出的问题无关,循环

for(i=9;i<=b;i*10+9)

永远不会终止(假设b大于 9),因为您的循环实际上修改i. 它应该是

for (i = 9; i <= b; i = i * 10 + 9)
//                  ^^^ Assign the result back to i

你的编译器应该已经警告你了。例如,GCC 给出以下警告

main.cpp:12:26: warning: for increment expression has no effect [-Wunused-value]
   12 |         for(i=9;i<=b;i*10+9)

如果它没有警告你,那么你应该确保你在编译时启用了警告。


也不相关,但标题bits/stdc++.h不标准,不应该使用。 std::cout在标准头文件中声明iostream。同样,如果您使用它而不是包含整个标准库,那么您就不太可能遇到令人困惑的歧义。


推荐阅读