我已经做了一个简单的计算编程来教自己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;
}
修改
我忘了提到我非常喜欢编程,我只想自己学习它。有些事情似乎很奇怪,但我只是想解决并理解当时的一个问题。
答案 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