2016-05-03 264 views
0

我想從文件中讀取數字,每個數字都在一個新行上,它們是十進制數字,其中一些是負數。我想將它們存儲到數組中並計算文件中有多少個數字。 我知道以下代碼計算數字,但它只計算文件中的正數。我試着將'0'改爲負值,但它們不起作用,它不會給出錯誤,但它始終不會給出正確的輸出。我如何計算負數和正數?C從文件讀取負數和正數數組到數組

int main() 
    { 
      double a[MAX]; 
      double num; 
      int n = 0; 

      scanf("%lf", &num); 
      while (num >=0) { 
       a[n] = num; 
       n++; 
       scanf("%lf", &num); 
      } 
    } 
+3

'while(n BLUEPIXY

回答

3

您的邏輯是有缺陷的。一旦找到第一個非正數,您將立即打破循環。此外,你不確定你不使用a越界。您需要使用:

while (n < MAX && scanf("%lf", &num) == 1) 
{ 
    if (num >= 0) 
    { 
     a[n] = num; 
     n++; 
    } 
} 

如果你要計算所有非零數字,用途:

while (n < MAX && scanf("%lf", &num) == 1) 
{ 
    if (num != 0) 
    { 
     a[n] = num; 
     n++; 
    } 
} 

既然你將在有條件的while循環來讀號,刪除scanf在循環之前。

+0

@EbonyDoe,既然你接受了我的回答,我假設你不需要更多的解釋。如果沒有,請告訴我。 –

0
while (num >=0) 

只要您讀取負數,此循環條件就會中斷。只要文件中沒有更多數字要讀取,就可以結束循環,並計算進程中的正數:

int main() 
{ 
     double a[MAX]; 
     double num; 
     int n = 0; 

     while (n < MAX && scanf("%lf", &num) == 1) { 
      a[n] = num; 
      n++; 
     } 

     // to count positives, zeros, negatives 
     int np, nz, ng; 
     np = nz = ng = 0; 
     for (int i = 0; i < n; i++) { 
      if (a[i] > 0) np++; 
      else if (a[i] == 0) nz++; 
      else ng++; 
     } 
     printf("%d %d %d\n", np, nz, ng); 
}