2016-02-13 73 views
0

编译完成后,我的GetInt函数会使函数中的printf语句在屏幕上打印三次。我相信这是由于我将所有半径,底部和高度初始化为GetInt(void)时引起的,但我没有看到其他准确初始化这些变量的方法。请帮忙!如何在用户自定义函数中重复输出

#define _CRT_SECURE_NO_WARNINGS 
#define PI 3.14159 
#include <stdio.h> 
#include <math.h> 

int GetInt(void); 
double CalcTriangleArea(int base, int height); 
double CalcCircleArea(int radius); 

int main(void) 
{ 
    int radius, base, height; 
    double triangleArea; 
    double circleArea; 

    radius = GetInt(); 
    base = GetInt(); 
    height = GetInt(); 
    triangleArea = CalcTriangleArea(base, height); 
    circleArea = CalcCircleArea(radius); 

    return(0); 
} 

int GetInt(void) 
{ 
    int x; 

    { 
     printf("Please enter a radius: \n\n"); 
     scanf("%d", &x); 

     printf("Please enter a base: \n\n"); 
     scanf("%d", &x); 

     printf("Please enter a height: \n\n"); 
     scanf("%d", &x); 
    } 
    return(x); 
} 

double CalcTriangleArea(int base, int height) 
{ 
    double triangleArea; 
    printf("Triangle area is %.2f \n\n", triangleArea = .5*base*height); 

    return(0); 
} 

double CalcCircleArea(int radius) 
{ 
    double circleArea; 
    printf("Area is %.4f \n\n", radius, circleArea = PI * pow(radius, 2)); 

    return(0); 
} 
+0

你写入同一本地变量'x'一遍又一遍......此外,还有不必要的块'{}' – e0k

回答

1

经验法则是尽量避免重复自己,不要重复自己。想象一下,你想从两条新线(\n\n)改为三条(\n\n\n)?您需要进行三次更改。

看着GetInt的裸露骨头,您正在打印提示符,两个新行,获取一个值并将其返回。因此,我们可以这样写新功能:

void getInt(char* prompt) 
{ 
    int x, numberOfConversions;    // numConversions is the number of int's read from the keyboard buffer 

    printf("%s: \n\n", prompt); 
    numberOfConversions = scanf("%d", &x); 

    while (numberOfConversions != 1)   // while the user did not enter a number 
    { 
     printf("Please enter a number: "); 
     numberOfConversions = scanf("%d", &x)" 
    } 

    return x;         // Always returns a valid number 
} 
+0

避免重复使用?请解释。 –

+0

@ScottHunter感谢您指出,我的意思是“避免重复自己”,可重复性当然是目标,所以我有点说完全错误的东西xD我相应地修复了我的答案 – AustinWBryan

1

GetInt请求,并读取,每次被调用时,3个不同的值,但只返回最后一个。

我认为你真正想要的是让GetInt要求并返回一个值,或者在调用它之前将其提示打印或打印出来。