计算功能/程序流程中的错误

时间:2015-03-22 12:01:01

标签: c

我已经做了一个简单的计算编程来教自己C.但我现在有一个奇怪的错误,并想提出一些建议。

大约一小时前,我也在这里请求帮助摆脱全局变量并得到一些建议(再次感谢)。

现在我已经实现了这些建议但是当我现在在计算中输入一个直径时,它返回一个用于al 3函数的奇数大数和奇数。 这个数字对于所有3个函数都是相同的。

我不明白函数从哪里获取该数字,因为我首先在cir_user_input()(input.c)中定义了直径变量,并且只在getRadius(float diameter)(circlefunctions.c)中再次调用它。我已经尝试了几个像指针或使用EXTERN语句的东西,但这并没有给我我想要/期望的结果。希望有人可以指出我在这里做错了什么,或者可以建议一些关于如何解决这个问题的文件?

的main.c

#include <stdio.h>

#include "menu/menu.h"
#include "circle/circlemenu.h"
#include "input/input.h"

int main(void)
{
    while(1)
{
    menu();
    switch(menu_user_input())
{
    case 1:

        info_top();
        cir_user_input();
        info_bottom();
        break;

    case 2:
        system("cls");
        break;

    case 3:
        system("cls");
        break;

    case 8:
        system("cls");
        break;

    case 9:
        system("cls");
        break;

    case 0:
        return(0);

    default:
        system("cls");
        printf("\n **Wrong choice try again...**\n");
        break;
}

}
 return 0;
}

circlemenu.c

#include <stdio.h>
#include "circlemenu.h"

void info_top()
{
    system("cls");
    printf(" ----------------------------------------\n");
    printf(" Typ the diameter of the circle: ");
}

void info_bottom(double diameter)
{
    printf(" ----------------------------------------\n");
    printf(" The radius = %f \n\n" , getRadius(diameter));
    printf(" The surface = %f \n\n" , getSurface(diameter));
    printf(" The outline = %f \n" , getOutline(diameter));
    printf(" ----------------------------------------\n");
}

circlefunctions.c

#include "circlefunctions.h"
#include "../input/input.h"
#define PI 3.14

double getRadius(float diameter)
{
  double radius = diameter / 2;
  return radius;
}

double getSurface(float diameter){
   double radius = getRadius(diameter);
   return PI * (radius * radius);
}

double getOutline(float diameter){
    double radius = getRadius(diameter);
    return 2 * PI * radius;
}

Input.c中

#include <stdio.h>
#include "input.h"

int menu_user_input()
{
    int number;
    scanf(" %d", &number);
    return number;
}

float cir_user_input()
{
    float diameter;
    scanf(" %e", &diameter);
    return diameter;
}

修改

我忘了提到我非常喜欢编程,我只想自己学习它。有些事情似乎很奇怪,但我只是想解决并理解当时的一个问题。

2 个答案:

答案 0 :(得分:3)

info_bottom();你应该将直径作为参数传递,即info_bottom(diameter);

答案 1 :(得分:1)

添加到@JerryGoyal的答案,在您的main.c

case 1:

    info_top();
    cir_user_input();
    info_bottom();          //  here
    break;

在注释行中,您需要在调用时给info_bottom()一个参数。像info_bottom( diameter );这样的地方diameter是double类型的变量,你必须在main.c中声明

如果您打开了编译器警告,它应该已经警告过您。

您还应该在

中设置diameter
double getRadius(float diameter)
double getSurface(float diameter)

double getOutline(float diameter)

类型为double。换句话说,参数应为double diameter