2013-11-23 269 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