2013-10-19 62 views
0

我有一個C代碼片段下面的問題http://www.codechef.com/ACMKAN13/problems/LINEPROB,但輸入似乎進入無限循環,它不停止。有人可以請看看。輸入在C程序中無限循環

感謝提前:)

整個代碼爲:http://pastebin.com/aKdybQtm

int main(){ 
    int *res, in[4], i, j, n; 
    j = 0; 
    scanf("%d", &n); 
    res = malloc(n*(sizeof(int))); 
    for(i=0; i<n; i++) 
    { 
     scanf("%d", &in[0]); 
     scanf("%d", &in[1]); 
     scanf("%d", &in[2]); 
     scanf("%d", &in[3]); 
     res[j] = countbox(in); 
     j++; 
    } 
    for(i=0; i<n; i++) 
     printf("%d\n", res[i]); 
    return 0; 
}  
+0

你怎麼能告訴輸入進入一個無限循環是真的嗎?也許'countbox'(這裏沒有定義)很慢或不終止? –

+0

我添加了一個printf來檢查countbox函數 – Pranjal

+0

問題出在'countbox'的某個地方。檢查你在那裏的'while'條件。另外,我不確定你是否知道當你用C分割整數時,它不會自動給你一個浮點數的答案。它會做整數算術。這可能會影響你的計算。 – lurker

回答

3

有在mainfor循環沒有問題。問題是在循環在你countbox功能

if(x1 < x2){ 
    while((x1+i)<x2){ 
     if(getY(m, (x1+i), in) != (x1+i)) 
      count++; 
    } 
} 

一旦(x1+i)<x2條件爲真它總是會因爲你沒有更新i

+0

非常感謝。這解決了這個問題。但是當我在函數的開頭放置一個printf時,爲什麼它不打印? – Pranjal

+0

它在我的編譯器上打印'here'這個詞。 – haccks

+1

@ user1675947,關於printf:我的猜測是你沒有在你打印的字符串的末尾有一個換行符,並且由於stdout是行緩衝的,所以它不會顯示在屏幕上。 –