为什么循环停止?

时间:2013-11-23 20:10:12

标签: c++

我有一个bool函数issquare的程序,我的问题不需要你的代码。我有迭代变量T,它是对我将放置squarsized的时间字符串的次数的响应。但是在第一次输入字符串程序后停止,在T = 1,并且不进行下一次迭代。为什么呢?

int main(){
    int T;
    std::string line;
    std::cin>>T;
    int squaresize;
    int** arr=new int*[30];
    for(int d=0; d<30; d++){
        arr[d]=new int[30];
    }
    for(int i=0; i<T; i++){
        for (int d=0; d<30; d++){
            for(int d1=0; d<30; d++){
                arr[d][d1]=0;
            }
        }
        std::cin>>squaresize;
        for(int j=0; i<squaresize; i++){
            std::cin>>line;
            for(int a=0; a<squaresize; a++){
                if (line[a]=='#'){
                    arr[j][a]=1;
                }
            }
        }   
        if (issquare(arr, squaresize)==true){
            std::cout<<"Case #"<<i+1<<": YES";
        }
        else{
            std::cout<<"Case #"<<i+1<<": NO";
        }
        std::cout<<T;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

而不是

std::cin>>line;

尝试

getline(std::cin, line);

operator>>不读取整行,直到第一个空格。

答案 1 :(得分:0)

而不是j,你正在比较和递增i,外部循环也使用它:

for(int j=0; i<squaresize; i++){
    std::cin>>line;
    for(int a=0; a<squaresize; a++){
        if (line[a]=='#'){
            arr[j][a]=1;
        }
    }
}   

将来(以及可能更复杂的程序),学习如何使用调试器可以真正帮助您找到这样的错误。你的问题是最外面的循环执行时间少于T次:

for(int i=0; i<T; i++){

由于T的值是常量,因此必须在循环内修改i。调试这个的简单方法是使用调试器来找出变量的变化位置。在Visual Studio中,这可以通过从Debug中断开并添加数据断点来完成 - &gt;新断点 - &gt;新数据断点 - &gt;地址:&amp; i