从用户读取数字,直到给出负数,返回最高,最低,范围和数字计数?

问题描述 投票:0回答:3
#include <stdio.h>
#include <math.h>

int main(void) {
  int a,count,highest,lowest,range;
  for(count=0;scanf("%d",&a) >= 0;count++){
    if(count == 0){
      highest = a;
      lowest = a;
    }
    if(a > highest){
      highest = a;

    }
    if(a < lowest){
      lowest = a ;
    }

  }
  range = highest - lowest;
  printf("%d\n %d\n %d\n %d\n",count,highest,lowest,range);
  return 0;
}

问题是该程序直到我按CTRL D才停止,但是我希望它在输入负数时停止,如在scanf("%d",&a) >= 0;中所见,如何解决此问题?

c loops for-loop scanf eof
3个回答
0
投票

scanf("%d",&a) >= 0不检查a>=0该检查scanf返回的结果,这与成功获取数据有关。

int main(void) {
  int a,count,highest,lowest,range;
 scanf("%d",&a);
 for(count=0;a>= 0;count++){
    if(count == 0){
      highest = a;
      lowest = a;
    }
    if(a > highest){
      highest = a;

    }
    if(a < lowest){
      lowest = a ;
    }
   scanf("%d",&a);
  }
  range = highest - lowest;
  printf("%d\n %d\n %d\n %d\n",count,highest,lowest,range);
  return 0;
}

0
投票
C中的

scanf()函数返回已成功扫描的输入总数,如果在分配第一个接收参数之前发生输入失败,则返回EOF。因此,在您的情况下,即使您输入负数,scanf("%d",&a)也会返回值1。因此,在您按下CTRL D之前,代码中的for循环不会终止。


0
投票

以下列方式在for循环中写入条件

for ( count = 0; scanf("%d",&a) == 1 && a >= 0; count++ ){
//...

另外,最好将所有if语句合并在一组if-else语句中,例如

if ( count == 0 ){
  highest = a;
  lowest = a;
}
else if( a > highest ){
  highest = a;
}
else if(a < lowest){
  lowest = a ;
}
© www.soinside.com 2019 - 2024. All rights reserved.