2013-11-23 164 views
0

我有一个程序与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; 
} 

回答

1

而不是

std::cin>>line; 

尝试

getline(std::cin, line); 

operator>>不读取整条生产线,只有等到第一个空格。

+0

中断和添加数据断点来完成。操作员>>是否阅读,直到第一个\ n? – ratkke

+0

@ratkke:不,它直到第一个空格,它可能是'\ n'或可能是空格,制表符,'\ r'等等。以先到者为准。 –

+0

因此,对于我的问题 - >>完全没问题。但是我的阅读线路不在主循环中,所以主循环不依赖于输入线。但主循环停止,这就是问题 – ratkke

0

相反,你的比较和增加i j的,它也使用外循环:

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的值是恒定的,必须有所改变我的内循环。一个简单的方法来调试这将是使用调试器来找出变量的变化。在Visual Studio中,这可以通过从调试 - >新断点 - >新数据断点 - >地址:& i