为什么循环停止

Why is cycle stopping?

本文关键字:循环 为什么      更新时间:2023-10-16

我有一个带有布尔函数issquare的程序,我的问题不需要这些代码。我有一个迭代变量T,它是我将平方大小的时间串放入多少次的响应。但在第一次输入字符串之后,程序在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;
}

而不是

std::cin>>line;

尝试

getline(std::cin, line);

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

不是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中,这可以通过从"调试"->"新断点"->"新建数据断点"->地址中断并添加数据断点来完成;i