2016-02-13 21 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要求並返回一個值,或者在調用它之前將其提示打印或打印出來。

相關問題