c++ 为什么我的代码在for循环使用break时不输出参数的值?[关闭]

aiazj4mn  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(175)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3小时前关门了。
截至3小时前,社区正在审查是否重新讨论此问题。
Improve this question

#include <iostream>

using namespace std;

void rest(int x, int y, int n, int& k)
{
    for(int k = n; k > 0; k--)
    {
        if(k % x == 2 && k % y == 2)
        {
            break;
        }
    }
}

int main()
{
    int x, y, n, nru;
    cin >> x >> y >> n;
    rest(x, y, n, nru);
    cout << "show the number " << nru;
    return 0;
}

这个程序应该输出小于n的最大数,并且哪个模式x和y给出结果2。为什么我的输出是0,而它应该是2022?

ccgok5k5

ccgok5k51#

for(int k=n; ...隐藏了引用参数的定义,但声明了一个新变量,该变量仅在循环体可见。
因此,在循环中迭代时,您不会更改参数k
循环应该是for(k=n; ...
由于nru在作为参数传递给函数之前从未初始化,因此在函数调用之后它仍然未初始化,并且在之后访问它是 * 未定义的行为 *。没有保证的输出。
如果你打开了所有编译器的警告级别(例如,使用g++的-Wall -Wextra),很可能会向你报告变量隐藏或至少缺少初始化:

g++ -std=c++20 -O2 -Wall -Wextra -pedantic -pthread main.cpp && ./a.out
main.cpp: In function 'void rest(int, int, int, int&)':
main.cpp:5:37: warning: unused parameter 'k' [-Wunused-parameter]
    5 | void rest(int x, int y, int n, int& k)
      |                                ~~~~~^
main.cpp: In function 'int main()':
main.cpp:21:35: warning: 'nru' is used uninitialized [-Wuninitialized]
   21 |     cout << "show the number " << nru;
      |                                   ^~~
main.cpp:18:18: note: 'nru' was declared here
   18 |     int x, y, n, nru;
      |                  ^~~
show the number 0

g++ demo at coliru

相关问题