#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;
中看到的那样,我该如何解决呢?
答案 0 :(得分:3)
通过以下方式在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 ;
}
答案 1 :(得分:2)
scanf()
函数返回已成功扫描的输入总数,如果在分配第一个接收参数之前发生输入失败,则返回EOF。因此,在您的情况下,即使您输入负数,scanf("%d",&a)
也会返回值1
。因此,在您按下 CTRL D 之前,代码中的for
循环不会终止。
答案 2 :(得分:1)
此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;
}