我是c的初学者。我被赋予了一项任务,以检查用户是否可以用3个角度的输入形成三角形,并且还必须将三角形的类型(例如倾斜,斜角等)打印到屏幕上。我需要分两部分执行此操作,并尝试在主要部分中执行第一部分,同时将第二部分声明为函数。
然而,似乎我不能在函数中使用主函数中使用的相同变量而不再声明它。有没有办法实现这个目标?
我用Google搜索并了解了全局变量,然而,它是否真的适用于这种情况,因为变量的值是用户输入,因此无法在主脚本和其他函数之外执行?
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
double ang1,ang2,ang3;
printf("This program determines if a triangle can be formed with an input of 3 angles.\n");
printf("Enter the first angle: ");
scanf("%lf",&ang1);
printf("\nEnter the second angle: ");
scanf("%lf",&ang2);
printf("\nEnter the third angle: ");
scanf("%lf",&ang3);
if (ang1<=0.000000 || ang2<=0.000000 || ang3<=0.000000){//handles any angles below or equal to 0 degrees
printf("\nError 404: Angle(s) are not above 0 degrees.\nPlease restart the program again\n");
}
else{
if (ang1+ang2+ang3==180.000000){ //checks if angles add up to 180 degrees
printf("\nA triangle can be formed by this three angles.\n");
}
else{
printf("A triangle cannot be formed by this three angles.\n");
}
}
task2();
}
task2(){ //In a new file
double ang1,ang2,ang3;
printf("This program determines if a triangle can be formed with an input of 3 angles.\n");
printf("Enter the first angle: ");
scanf("%lf",&ang1);
printf("\nEnter the second angle: ");
scanf("%lf",&ang2);
printf("\nEnter the third angle: ");
scanf("%lf",&ang3);
if (ang1<=0.000000 || ang2<=0.000000 || ang3<=0.000000){//handles any angles below or equal to 0 degrees
printf("\nError 404: Angle(s) are not above 0 degrees.\nPlease restart the program again\n");
}
else if (ang1+ang2+ang3==180.000000){ //checks if angles add up to 180 degrees
printf("\nA triangle can be formed by this three angles.");
if (ang1==ang2==ang3){ //checks for equilateral triangle
printf("\nThis is an equilateral triangle.");
}
if (ang1==ang2 || ang2==ang3 || ang1==ang3){ //checks for isoceles triangle
printf("\nThis is an isoceles triangle.");
}
if (ang1!=ang2 || ang2!=ang3 || ang3!=ang1){ // chacks for scalene triangle
printf("\nThis is a scalene triangle.");
}
if (ang1==90.000000 || ang2==90.000000 || ang3==90.000000){ //checks for right angles
printf("\nThis is a right angle.");
}
else{
printf("\nThis is an oblique triangle."); //when no angles are 90 degrees
}
if (ang1<90.000000 && ang2<90.000000&& ang3<90.000000){ //checks if all angles are acute
printf("\nThis is an acute triangle.");
}
if (ang1>90.000000 || ang2>90.000000 || ang3>90.000000){ //checks if one angle is obtuse
printf("\nThis is an obtuse triangle.");
}
}
else {
printf("A triangle cannot be formed by this three angles.\n");
}
}
答案 0 :(得分:5)
将您的角度作为参数传递给被调用的函数:
void task2(double ang1, double ang2, double ang3) {
// check what's necessary here
}
int main() {
double ang1, ang2, ang3;
// read user input
// check whether angles make a triangle
task2(ang1, ang2, ang3);
}
答案 1 :(得分:3)
将变量作为参数传递给task2
函数。
void task2(double ang1, double ang2, double ang3);
int main (){
...
task2(ang1, ang2, ang3);
}
void task2(double ang1, double ang2, double ang3) {
...
}
答案 2 :(得分:1)
您可以将3个值作为参数传递给第2个函数。 像这样定义:
void task2 (double ang1, double ang2, double ang3){
...
...
}
并在第一个上调用它:
task2(ang1, ang2, ang3);
然后你就不必再要求他们两次,就像你现在正在做的那样。
另外,除非你真的需要全局变量,否则不建议使用全局变量(Are global variables bad?)
答案 3 :(得分:1)
正如其他答案所述,将角度作为参数传递。除此之外,我还看到了一些问题:
if (ang1==ang2 || ang2==ang3 || ang1==ang3){ //checks for isoceles triangle
printf("\nThis is an isoceles triangle.");
}
这应该是其他如果。如果它是普通的if
,则等边三角形将被声明为等边和等腰。
if (ang1!=ang2 || ang2!=ang3 || ang3!=ang1){ // chacks for scalene triangle
printf("\nThis is a scalene triangle.");
}
在这个片段中,每个OR ||应该成为AND&amp;&amp ;.这不仅仅是一对必须是不平等的,而是所有这些。另一种选择就是使用(ang1!=ang2!=ang3)
。
其他一切看起来都不错。祝你好运!