我有一个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;
}
答案 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