如何从另一个函数c

时间:2018-02-27 20:53:50

标签: c function variables call local

我是编程新手。我想从函数调用(第一,第二,第三个函数中的变量"输入"以及函数"数学"相应地)。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void math (void);
void first (void);
void second (void);
void third (void);
void enter(void);
void scan(void);


int main() 
{

 first();  //function
 second(); //function
 third();  //function
 enter();  //function
 printf("\n\n Would you like to edit? (Y/N)\n\n");
 scan();   //function
 return(0);
}

以下是用户输入:

void first (void){
float a;
printf("Enter First number: ");
scanf("%f",&a);
 }

 void second (void){
 float b;
 printf("Enter Second number: ");
 scanf("%f",&b);
  }

  void third (void){
  float c;
  printf("Enter Third number: ");
  scanf("%f", &c );
  }

如何从用户输入调用变量到下面的函数?

  void enter(){
  float a,b,c;
  printf("you have entered a: %f, b: %f, c:%f", a,b,c);
     }

这是用户想要编辑或继续初始输入数字的循环。

    void scan(void){
    int ch;
    scanf("%d", &ch);
    if (ch==1){
        main();

        }else{
        math();
        }
        }

这里我还想从函数(第一个,第二个第三个)调用输入变量,以便执行一些数学计算。

        void math (void){
           float a,b,c;
           float x,y,z;
           x=a+b+c;
           y= powf(x,2);
           z=sqrt(y);

           printf("Final Result of Addition is: %f \n Final Result of 
           Multiplication is: %f \n Final Result of squareroot  is:%f\n 
           ",x,y,z);
                          }

3 个答案:

答案 0 :(得分:3)

最好是函数不依赖或修改它们外部的数据。这并不总是可行的,但如果能够根据这个目标来定义它们会更好。

在您的情况下,函数firstsecondthird的功能基本相同。最好只使用一个函数并给它一个更合适的名称,例如read_float并更改返回类型,以便用户输入的值返回给调用函数。

声明为:

float read_float(char const* prompt);

然后,您可以将其用作:

float a = read_float("Enter the first number:");
float b = read_float("Enter the second number:");
float c = read_float("Enter the third number:");

函数enter无法正确传达它正在做的事情。它应该重命名为更合适的内容,例如display_input_values。它可以接受用户输入的值作为其参数。

声明为:

void display_input_values(float a, float b, float c);

并将其用作:

float a = read_float("Enter the first number:");
float b = read_float("Enter the second number:");
float c = read_float("Enter the third number:");
display_input_values(a, b, c);

scan函数也没有明确表达其含义。您可以将scan划分为两个函数 - 一个函数返回,您可以选择是继续下一个输入还是调用用户输入计算某些内容的函数。

您可以使用名为read_int的函数as:

从用户处获取该选项
int option = read_int("Enter 1 for next round of inputs and 2 to compute with current input:");

并将返回值用作:

if ( option == 2 )
{
   // Do the computations
}

您还需要另一个选项来退出程序。获得选项的调用需要是:

char const* prompt = "Enter 1 for next round of inputs.\n"
                     "Enter 2 to compute with current input.\n"
                     "Enter 3 to exit program.\n";
int option = read_int(prompt);

在继续使用您希望阅读的数据之前,始终添加代码以检查scanf是否成功。

这是您的代码的更新版本。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

float read_float(char const* prompt);
int read_int(char const* prompt);
void display_input_values(float a, float b, float c);
void math(float a, float b, float c);

int main() 
{
   while ( 1 )
   {
      float a = read_float("Enter first number: ");
      float b = read_float("Enter second number: ");
      float c = read_float("Enter third number: ");

      display_input_values(a, b, c);


      char const* prompt = "Enter 1 for next round of inputs.\n"
                           "Enter 2 to compute with current input.\n"
                           "Enter 3 to exit program.\n";
      int option = read_int(prompt);
      if ( option == 3 )
      {
         break;
      }

      else if ( option == 2 )
      {
         math(a, b, c);
      }
   }
}


float read_float(char const* prompt)
{
   float num;
   printf("%s", prompt);

   // For flushing the output of printf before scanf.
   fflush(stdout);

   if (scanf("%f", &num ) != 1)
   {
      print("Unable to read number. Exiting.\n");
      exit(1);
   }
   return num;
}

int read_int(char const* prompt)
{
   int num;
   printf("%s", prompt);

   // For flushing the output of printf before scanf.
   fflush(stdout);

   if (scanf("%d", &num ) != 1)
   {
      print("Unable to read number. Exiting.\n");
      exit(1);
   }
   return num;
}

void display_input_values(float a, float b, float c)
{
  printf("You have entered a: %f, b: %f, c:%f\n", a, b, c);
}

void math(float a, float b, float c)
{
   // Do whatever makes sense to you.
}

答案 1 :(得分:0)

例如在Main中声明float a,b,c;并更改函数以返回浮点数 float first() { ... } 然后写a = first();

答案 2 :(得分:-1)

局部变量(顾名思义)是本地变量,在函数结束后不能保留它们的值。您有两种选择:

  1. 让函数第一,第二和第三个返回它们的数字,另一个函数将它们作为参数。
  2. 制作a,b,c全局变量。
  3. 第二个更容易,但它被称为糟糕的编程风格。