2016-05-03 165 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); 
}