从用户处读取数字直到给出负数,返回最高、最低、范围和数字计数? #包括 #包括 内部主(空){ int a,计数,最高,最低,范围; 对于(count=0;scanf(“%d”,&a)>=0;count++){ 如果(计数=0){ 最高=a; 最低=a; } 如果(a>最高){ 最高=a; } 如果(a=0如何解决此问题?

从用户处读取数字直到给出负数,返回最高、最低、范围和数字计数? #包括 #包括 内部主(空){ int a,计数,最高,最低,范围; 对于(count=0;scanf(“%d”,&a)>=0;count++){ 如果(计数=0){ 最高=a; 最低=a; } 如果(a>最高){ 最高=a; } 如果(a=0如何解决此问题?,c,loops,for-loop,scanf,eof,C,Loops,For Loop,Scanf,Eof,问题是,在我按下CTRL D之前,该程序不会停止,但我希望在输入负数时停止,正如您在scanf(“%D”,&a)>=0如何解决此问题?此scanf(“%d”,&a)>=0未检查a>=0此检查scanf返回,它是关于获取数据的成功和获取的输入数 #include <stdio.h> #include <math.h> int main(void) { int a,count,highest,lowest,range; for(count=0;scanf("%d",

问题是,在我按下CTRL D之前,该程序不会停止,但我希望在输入负数时停止,正如您在
scanf(“%D”,&a)>=0如何解决此问题?

scanf(“%d”,&a)>=0
未检查
a>=0
此检查
scanf
返回,它是关于获取数据的成功和获取的输入数

#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;
}
int main(无效){
int a,计数,最高,最低,范围;
scanf(“%d”和“&a”);
对于(计数=0;a>=0;计数++){
如果(计数=0){
最高=a;
最低=a;
}
如果(a>最高){
最高=a;
}
如果(a<最低值){
最低=a;
}
scanf(“%d”和“&a”);
}
范围=最高-最低;
printf(“%d\n%d\n%d\n%d\n%d\n”,计数,最高,最低,范围);
返回0;
}

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

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

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;
}
另外,最好将所有if语句组合在一组if-else语句中,如

for ( count = 0; scanf("%d",&a) == 1 && a >= 0; count++ ){
//...
if(计数==0){
最高=a;
最低=a;
}
否则,如果(a>最高){
最高=a;
}
否则如果(a<最低值){
最低=a;
}

请查看手册中的
scanf
并查看返回值的含义。负返回值与输入的负数无关。
if ( count == 0 ){
  highest = a;
  lowest = a;
}
else if( a > highest ){
  highest = a;
}
else if(a < lowest){
  lowest = a ;
}