C++ 和数组中的嵌套循环

Nested loops in c++ and arrays

我正在用 C++ 编写此程序,但无法确定我做错了什么。这个嵌套循环应该打印一个包含行和列的矩阵,但由于某种原因,它在要求用户输入时停留在第 0 行和第 0 列。提前致谢。

#include <iostream>
using namespace std;
int main ()
{
    //program to print the input values in rows and columns of two dimensional array in revserse roder using loop
    //decalre the vraibles and array
    int array [3][3],rows,cols,maxrows = 3,maxcols = 3;
    //use for loop to intiiate the array and input values from users
    for (rows = 0; rows < maxrows;rows = rows++ )
    {
        for (cols = 0; cols < maxcols;cols = cols++ )
        {
            cout  << " Enter the value for array location : " << " [ " << rows << " , " << cols << " ] " ;     
            cin >> array [rows][cols] ;
        }
    }
    //display the values entered in array starting with bottom row first and then the rest
    for ( rows = 0 ; rows < maxrows ; rows ++ )
    {
        for ( cols = 0 ; cols < maxcols ; cols ++ )
        {
            cout << " The values that were entered in this array starting with bottom row are " << array [rows][cols] ;
        }
    }
}     

评论暗示了问题,但没有明确说明:声明

rows = rows++

是不明确的,因为在 获取值然后分配给左侧后,右侧递增 。为 g++ 启用适当的警告后,它说

foo.c:26: warning: operation on ‘rows’ may be undefined

实际上,它表示某些编译器可能会给出不同的结果,例如使其与

没有区别
rows = rows

如果这样做,将导致死循环。 (顺便说一句,使用 g++ 时,该值确实会增加)。

你已经有了答案,但我想我应该指出变量声明的风格。即,int array [3][3],rows,cols,maxrows = 3,maxcols = 3;

这很糟糕,因为它不是很可读。行和列变量的类型在最严格的意义上是不正确的,请参阅为什么 size_t 在将其用作数组索引时更好。此外,可以说明为什么你应该支持预递增而不是 post-递增,除非你有充分的理由不这样做(++i 而不是 i++),尽管在这种特殊情况下它并不重要因为运算符没有超载。此外,适当地使用常量可以使代码更具可读性并消除某些类型的错误。最后,尽快给你的变量一个合理的值,以消除未定义的行为。

#include <iostream>
using namespace std;
int main ()
{
    //program to print the input values in rows and columns of two dimensional array in revserse roder using loop
    //decalre the vraibles and array
    int array [3][3] = {};
    const size_t maxrows = 3,
    const size_t maxcols = 3;

    //use for loop to intiiate the array and input values from users
    for (size_t rows = 0; rows < maxrows; ++rows )
    {
        for (size_t cols = 0; cols < maxcols; ++cols )
        {
            cout  << " Enter the value for array location : " << " [ " << rows << " , " << cols << " ] " ;     
            cin >> array [rows][cols] ;
        }
    }
    //display the values entered in array starting with bottom row first and then the rest
    for ( size_t rows = 0; rows < maxrows ; ++rows)
    {
        for ( size_t cols = 0; cols < maxcols ; ++cols)
        {
            cout << " The values that were entered in this array starting with bottom row are " << array [rows][cols] ;
        }
    }
}