如何在此while循环中将int更改为double,C

时间:2017-07-07 23:06:19

标签: c if-statement while-loop

我正在使用此代码来计算输入的平方和立方体,我添加了第三个选项来计算值除以2,所以我不得不将结果从int更改为double,但是我不要以为我做得对。这是我到目前为止所做的:

#include <stdio.h> 
// Function prototypes int Square(int value); int Cube(int value); 

int main () 
{ 
    /* variable definition: */  
    int intValue, menuSelect,Results;
    double doubleValue, Resultsb;
    intValue = 1;
    doubleValue = intValue;
    // While a positive number 
    while (intValue > 0)  {     
        printf ("Enter a positive Integer\n: "); 
        scanf("%d", &intValue);
        doubleValue=intValue;
        if (intValue > 0)  { 
            printf ("Enter 1 to calculate Square, 2 to Calculate Cube, 3 to Shrink 
                   value in half \n: "); 
            scanf("%d", &menuSelect); 
            if (menuSelect == 1)  { 
                // Call the Square Function 
                Results = Square(intValue); 
                printf("Square of %d is %d\n",intValue,Results); 
            } 
            else if (menuSelect == 2)  { 
                // Call the Cube function 
                Results = Cube(intValue); 
                printf("Cube of %d is %d\n",intValue,Results); 
            } 
            else if (menuSelect == 3) {
                Resultsb = Shrink(doubleValue);
                printf("%f shrunk in half is %f\n", doubleValue,Resultsb);
            }
            else  
                printf("Invalid menu item, only 1, 2 or 3 is accepted\n"); 
        }       
    }       
    return 0; 
} 
/* function returning the Square of a number */ 
int Square(int value) 
{ 
    return value*value; 
}   
/* function returning the Cube of a number */ 
int Cube(int value) 
{     return value*value*value; 
}
double Shrink(double value)
{   return value/2;
}

如果有人能告诉我我做错了什么会太棒了,谢谢!

2 个答案:

答案 0 :(得分:2)

在调用之前,您需要该函数的原型。否则,默认返回类型为int。所以说:

int Square(int value);
int Cube(int value); 
double Shrink(double value);
main()之前

,或将函数定义移到顶部。

您也不需要doubleValue变量。将intValue传递给函数会根据原型自动转换它。

这是工作计划。

#include <stdio.h> 
// Function prototypes
int Square(int value);
int Cube(int value); 
double Shrink(double value);

int main () 
{ 
    /* variable definition: */  
    int intValue, menuSelect,Results;
    double Resultsb;
    intValue = 1;
    // While a positive number 
    while (intValue > 0)  {     
        printf ("Enter a positive Integer\n: "); 
        scanf("%d", &intValue);
        if (intValue > 0)  { 
            printf ("Enter 1 to calculate Square, 2 to Calculate Cube, 3 to Shrink value in half \n: "); 
            scanf("%d", &menuSelect); 

            if (menuSelect == 1)  { 
                // Call the Square Function 
                Results = Square(intValue); 
                printf("Square of %d is %d\n",intValue,Results); 
            } 
            else if (menuSelect == 2)  { 
                // Call the Cube function 
                Results = Cube(intValue); 
                printf("Cube of %d is %d\n",intValue,Results); 
            } 
            else if (menuSelect == 3) {
                Resultsb = Shrink(intValue);
                printf("%d shrunk in half is %f\n", intValue,Resultsb);
            }
            else  
                printf("Invalid menu item, only 1, 2 or 3 is accepted\n"); 
        }       
    }       
    return 0; 
} 
/* function returning the Square of a number */ 
int Square(int value) 
{ 
    return value*value; 
}   
/* function returning the Cube of a number */ 
int Cube(int value) 
{     return value*value*value; 
}
double Shrink(double value)
{   return value/2;
}

答案 1 :(得分:0)

发布后,您的程序无法编译,因为您省略了Shrink()的原型。

  • 编译行Resultsb = Shrink(doubleValue);时,编译器会推断Shrink接受double参数并返回int(是的,它会这样做!)

  • 当它后来达到Shrink()的定义时,实际定义与之前的推断原型不兼容。

您应该在main()函数之前移动函数,或者至少为它们提供适当的原型。

在现代C(C99及更高版本)中,您必须定义所有功能或为其提供原型,然后再调用。上述行为适用于旧式C,许多编译器仍然支持它。