如何在C中进行此分配?第2部分

时间:2013-10-13 05:29:18

标签: c terminate

以下提示输入半径和高度,并使用这些值计算圆柱体积。如何编写此程序,以便在用户输入任一高度半径的负值时不会终止该程序?范围必须为1-10,不允许其他提示。只有在输入非数字的东西时才能终止循环。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


float areaCirc(float r){
return (M_PI*r*r);
}

float volCyl(float r, float h){
return (areaCirc(r)*h);
}


int main(void) {
float r, h;
int k = 0;
float volume;
float avgh = 0;
float toth = 0;

do{
    float exit = scanf("%f%f", &r, &h);
    if (exit == 0) 
    {break;}
    if(r<=0 || r>10){
        printf("Invalid radius: %.2f\n",r);
    }
    if(h<=0 || h>10){
        printf("Invalid height: %.2f\n",h);
    }
    if(r>=0 && r<=10 && h>=0 && h <= 10){
    volume = volCyl(r,h);
    k = k++;
    printf(" Cylinder %d radius %.2f height %.2f volume %.2f\n",k,r,h,volume);
    toth = toth + h;
} }while(r>0 && h>0);
    avgh = toth/k;
    printf("Total Height: %.2f\n",toth);
    printf("Average Height: %.2f\n",avgh);

return EXIT_SUCCESS;
}

3 个答案:

答案 0 :(得分:1)

查看while()中的语句。请注意,当且仅当这些条件导致为真时,这将保持循环。

答案 1 :(得分:1)

do {
    printf("Enter radius: ")
    scanf("%d", &r);
    printf("Enter height: ")
    scanf("%d", &h);
} while(r<=0 || h<=0);

你可以使用do-while循环来提示用户重新输入半径,而height值要么小于或等于0。

希望这会有所帮助:)

答案 2 :(得分:0)

  

我指定的范围必须是1到10(包括1和10),没有负值终止程序,并且不允许其他提示

修改您的主要功能

do{
    int ex = scanf("%f%f", &r, &h); //scanf returns int

   if (ex == 0)
    {break;}
    if(r<=0 || r>10){
        printf("Invalid radius: %.2f\n",r);
       continue;
    }
    if(h<=0 || h>10){
        printf("Invalid height: %.2f\n",h);
       continue;
    }
   // hence above conditions failed means you have given desired input
   // need not to check any conditions 
    volume = volCyl(r,h);
    k = k++;
    printf(" Cylinder %d radius %.2f height %.2f volume %.2f\n",k,r,h,volume);
    toth = toth + h;
   }while(r>0 && h>0);

  if(k>0) // check this other wise divide by zero will occur
    {
    avgh = toth/k;
    printf("Total Height: %.2f\n",toth);
    printf("Average Height: %.2f\n",avgh);
    }