从用户那里读取数字直到给出负数,返回最高、最低、范围和数字计数?
Reading numbers from the user until negative number is given, returning highest,lowest,range and number count?
#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;
我如何解决这个问题?
这个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;
}
scanf()
C 中的函数 returns 成功扫描的输入总数,如果在分配第一个接收参数之前发生输入失败,则为 EOF。因此,在您的情况下 scanf("%d",&a)
returns 即使您输入负数,值 1
也是如此。因此,在您按下 CTRL D 之前,代码中的 for
循环不会终止。
在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 ;
}
#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;
我如何解决这个问题?
这个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;
}
scanf()
C 中的函数 returns 成功扫描的输入总数,如果在分配第一个接收参数之前发生输入失败,则为 EOF。因此,在您的情况下 scanf("%d",&a)
returns 即使您输入负数,值 1
也是如此。因此,在您按下 CTRL D 之前,代码中的 for
循环不会终止。
在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 ;
}