【问题标题】:Two Consecutive for loop in C++, Second loop is not workingC ++中的两个连续for循环,第二个循环不起作用
【发布时间】:2020-02-08 16:15:13
【问题描述】:

目标:我有两个数组。第一个数组是:evenList,第二个是:oddList。我想以这种格式打印给定范围之间的偶数和奇数。

这是我的代码,

cout << "\nEven numbers between " << lowerLimit << " to " << upperLimit << ": ";

for(int i; i < evenList.size(); i++){
    cout << evenList[i] << "  ";
}

cout << "\n\nOdd numbers between " << lowerLimit << " to " << upperLimit << ": ";

for(int j; j < oddList.size(); j++){
    cout << oddList[j] << "  ";
}

第一个 for 循环打印所需的输出,但第二个循环不显示奇数。这是输出:

我已经阅读了一些关于 for 循环的内容,但我无法得到答案。如果有人面临相同的问题或问题并得到答案,请分享。我会很感激的。

【问题讨论】:

  • 请在循环中将您的迭代器初始化为 0。像这样,for(int i = 0; i
  • 不显示文本图像,将文本作为文本复制粘贴到问题中。另外请花一些时间阅读how to ask good questionsthis question checklist。并始终尝试创建一个合适的minimal reproducible example 来向我们展示。
  • 注意:为了可移植性(在我个人看来,更好的代码),使用std::endl 而不是\n 换行。
  • 请打开编译器警告,然后修复它们。尝试 gcc-Wall -Wextra 选项(我相信 Dev-C++ 使用它),搜索可以在 IDE 中设置编译器选项的位置。例如,在这种情况下,编译器会直接告诉您问题所在。
  • @fredrik 虽然我总体同意,但文本流上的\n 应该始终做正确的事情。或者至少我不知道有哪个平台没有。

标签: c++ for-loop dev-c++


【解决方案1】:

你也可以使用基于范围的 for 循环

cout<<"\nEven numbers between " << lowerLimit << " to " << upperLimit << ": ";
for (const auto &e: evenList)
{
    cout << e << "  ";
}

cout << "\n\nOdd numbers between " << lowerLimit << " to " << upperLimit << ": ";

for (const auto &o: oddList)
{
    cout << o << "  ";
}

【讨论】:

    【解决方案2】:

    尽量使用FOR EACH LOOP来防止变量初始化混淆。

    for(string s : eventList){ cout << s << endl; }
    

    第二个循环也一样。希望这次能成功

    【讨论】:

      【解决方案3】:

      我有两点会导致你不想要的输出。

      1. 初始化变量总是好的。在大多数情况下,它可能会导致您出现分段错误。在上面的代码中,你没有在 for 循环中初始化变量。
      2. 我没有使用过 C++,但我想您使用的是数组、evenListoddList。你正在使用条件j&lt;oddList.size()。这种情况可能出错的唯一方法是如果 oddList 数组中没有任何元素。检查这些数组中是否有任何元素。

      【讨论】:

        【解决方案4】:

        您没有初始化迭代器。 int i; 应该是 int i = 0;int j 也是如此。就像现在一样,这是未定义的行为。它只是第一次起作用而不是第二次起作用的机会,它可能两次都起作用,根本不起作用,立即崩溃或做一些完全不同的事情。


        您的编译器是否会针对此代码发出警告?理想情况下,它应该说类似“使用未初始化的局部变量'i'”。总是听编译器警告,它们可以帮助指出一些常见的错误。如果您的编译器在此处未发出警告,请尝试查看是否可以将其配置为更严格的警告。

        【讨论】:

        • 当我初始化我的 i 和 j 时,我得到了我想要的输出。谢谢@Blaze。我有两个问题,首先:我应该将所有 int 初始化为 0 吗?第二:编译器不显示任何错误,如“未初始化的局部变量”。有设置吗?
        • 您不必专门将它们初始化为0,但通常您应该在读取它们之前初始化或设置变量为一个值(这包括++,它必须在为了以后增加它)。至于编译器警告,这取决于您使用的编译器 - 对于 GCC,它是 -Wuninitialized(但最好只设置 -Wall 来启用其他许多问题的警告)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-21
        • 1970-01-01
        • 2013-08-04
        • 2020-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多