循环后,C ++无法更改整数值

时间:2015-05-22 05:12:52

标签: c++ loops

在我的计划开始时,我声明变量ij

int i, j;

在执行过程中,我也使用变量名ij作为oop索引变量。我意识到这可能不是清晰度方面的最佳选择,但由于这是一个玩具项目,我认为这不重要。

问题是,在以下循环将数组内容打印到txt文件后,i == N == 29

ofstream a_file("2d_array.txt");
for (int i = 0; i<N; ++i) {
  for (int j = 0; j<N; ++j)
    a_file << m[i][j] << ' ';
    a_file << endl;
}

当我稍后尝试在程序中再次使用i时:

for (int num_slices_processed = h + 1; num_slices_processed < N;
         num_slices_processed++){
  i = 0;
  j = num_slices_processed;
  ...

i仍然设置为29,即使在应该将其设置为0的行之后也是如此。j已正确设置。这里发生了什么?

以下是问题部分的所有代码:

#include <string>
#include <iostream>
#include <fstream>

using namespace std;
int smallest(int x, int y, int z);
bool basesMatch(char b1, char b2);

int main() {

    const int N = 29;
    int h, l, mm;
    int i, j;
    l = 10;
    mm = 2;
    h = 5;

    int m[N][N];

    //initialize m
    for (int i = 0; i < N; i++){
        for (int j = i; j < N; j++) {
            if (j-i <= h)
                m[i][j] = 0;
        }
    }

    ofstream a_file("2d_array.txt");

    for (int i = 0; i<N; ++i) {
        for (int j = 0; j<N; ++j)
            a_file << m[i][j] << ' ';
        a_file << endl;
    }

    for (int num_slices_processed = h + 1; num_slices_processed < N; num_slices_processed++){
        //while j is in bounds, ie j < N. This fills in one diagonal slice of m from L->R top -> bottom.
        i = 0; //************ i is not being set here
        j = num_slices_processed;
        while (j < N) {
            if (basesMatch(seq[i], seq[j])) {
                t = m[i + 1][j - 1];
                m[i][j] = m[i + 1][j - 1];
            }
            else  {//bases don't match
                m[i][j] = smallest(m[i + 1][j] + 1, m[i][j - 1] + 1, m[i + 1][j - 1] + 1);
            }
            i++;
            j++;
        }
    }

1 个答案:

答案 0 :(得分:0)

检查它是否进入循环。 num_slices_processed可以为null或已经&lt; N,所以你永远不会达到作业陈述。