2013-06-03 47 views
1
#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <stdlib.h> 

int main() { 
    int test, l , b, sqr, area, sqra, num; 
    fscanf(stdin, "%d", &test); 
    while(test--) { 
     fscanf(stdin, "%d %d", &l, &b); //input: 
     area = l * b;      //2 
     sqr = sqrt(area);     //2 2 
     sqra = sqr * sqr;     //7 9 
     while(sqr) { 
      if(!(area % sqra)) { 
       num = area/sqra; 
       --sqr; 
       break; 
      } 
     } 
     fprintf(stdout, "%d\n", num); 
    } 
    return 0; 
} 

我的代碼在測試> = 2時不起作用。我認爲問題出在fscanf上。你能解釋爲什麼嗎?爲什麼不是fscanf()工作?

+1

你在哪裏以及如何聲明'num'?另外,如果'area'的平方根小於1,則在'sqr'中結果將被截斷爲零(意味着循環將不會運行,'num'將最可能包含一個隨機值)。 –

+3

爲了幫助您找到問題,我建議您在調試器中逐行運行程序,同時檢查所有計算結果。 –

+0

您應該提供一些示例輸入。 –

回答

3

我不認爲它必須做任何與scanf,例如:如果l = 2和b =所以它被舍入到2,然後sqra = 4,面積%sqra然後是6%4 = 2,所以它永遠不會進入創建無限循環的循環中的條件。

在你的例子中,第二個輸入相同:7 * 9 = 63 => sqr = 7 => sqra = 49 => area%sqra = 14。再一次,無限循環。

+0

我有--sqr循環。最後我會得到sqr = 1,因此6%1 = 0 –

+1

不在您發佈的代碼中。在你的代碼中,'--sqr'只有當條件評估爲true且l = 7,b = 9時纔會發生 –

1

你應該真的使用scanf,而不是fscanf來做這件事,而且,你在哪裏聲明num?我很驚訝它編譯。另外,你有區域的情況不能被sqra整除將會有一個無限循環。 (如一個矩形邊3和7)

+0

num被聲明(這是最後一個變量) –

1

[宣佈NUM後]你的fscanf正常工作:

fscanf(stdin, "%d %d", &l, &b); 
    printf("inp: %d %d\n",l,b); 

嘗試打印用戶輸入。有用。你的代碼邏輯是錯誤的,只有你沒有得到預期的結果。