通过带有函数的switch语句传递变量

通过带有函数的switch语句传递变量,c,function,menu,switch-statement,C,Function,Menu,Switch Statement,我试图学习如何使用函数通过菜单传递变量。问题是,在任何时候都没有人教过如何这样做。您可以想象,我在第一个菜单函数中输入的任何变量通常用于我的案例/其他函数,例如 if (count==0) { low = number; high = number; count++; sum = number; } else { if (number < low) number = low; if (number &g

我试图学习如何使用函数通过菜单传递变量。问题是,在任何时候都没有人教过如何这样做。您可以想象,我在第一个菜单函数中输入的任何变量通常用于我的案例/其他函数,例如

  if (count==0)
  {
    low = number;

    high = number;

    count++;

    sum = number;
  }
  else
  {
    if (number < low)
      number = low;

    if (number > high)
      high = number;

    count ++;

    sum += number;
  }
if(计数==0)
{
低=数量;
高=数量;
计数++;
总和=数字;
}
其他的
{
如果(数量<低)
数字=低;
如果(数字>高)
高=数量;
计数++;
总和+=数字;
}
不会通过函数2,任何熟悉C的人都会意识到这一点。它也不会在int main中工作。如何为其他函数定义用户输入的数字、最高值、最低值等?这是我到目前为止所做的,循环和菜单工作得很好

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

int menuChoice()
{
  int choice;

  printf("1.Enter a number\n");
  printf("2.Display Highest Number Entered\n");
  printf("3.Display Lowest Number entered\n");
  printf("4.Display Average of Numbers Entered\n");
  printf("5.Quit\n");

  printf("Enter your choice:   ");
  scanf("%i", &choice);

  return choice;
}

int function1()
{
  int number;

  printf("Enter a number:\n");
  scanf("%i", &number);

  return number;
}

int function2()
{

}

int function3()
{

}

int function4()
{

}

int main()
{
  int quit = 0;
  while (quit != 1)
  {
    int menu;

    menu = menuChoice();
    switch (menu)
    {
    case 1:
      function1();
      break;
    case 2:
      function2();
      break;
    case 3:
      function3();
      break;
    case 4:
      function4();
      break;
    case 5:
      quit = 1;
      break;
    default:
      printf("Please enter 1 through 5\n");

    }
  }
  return 0;
}
#包括
#包括
int menuChoice()
{
智力选择;
printf(“1.输入一个数字\n”);
printf(“2.显示输入的最高数字\n”);
printf(“3.显示输入的最低数字\n”);
printf(“4.显示输入数字的平均值\n”);
printf(“5.退出\n”);
printf(“输入您的选择:”);
scanf(“%i”和“选择”);
回报选择;
}
int function1()
{
整数;
printf(“输入一个数字:\n”);
scanf(“%i”和编号);
返回号码;
}
int函数2()
{
}
int函数3()
{
}
int函数4()
{
}
int main()
{
int-quit=0;
while(退出!=1)
{
int菜单;
menu=menuChoice();
开关(菜单)
{
案例1:
功能1();
打破
案例2:
函数2();
打破
案例3:
功能3();
打破
案例4:
函数4();
打破
案例5:
退出=1;
打破
违约:
printf(“请输入1到5\n”);
}
}
返回0;
}

让我们看看可以改进此代码的一些方法

  • 命名函数-函数应具有清晰的描述性名称,以便不熟悉该程序的人员轻松理解它们的功能。像function1和function2这样的名称不能实现这一点

  • 使用适当的数据结构-听起来您试图跟踪用户输入的所有数字,但您目前没有任何方法。最好的方法是使用数组,数组是一个保存其他值的容器。为了跟踪到目前为止的数字,让我们创建两个变量-一个存储数字的数组和一个跟踪输入数字数量的整数。现在,让用户最多输入100个数字。我们通过编写
    intarr[100]来实现这一点
    int numCount=0位于程序顶部。快速补充说明-这被称为全局变量-通常这不是一个好主意,但我们现在不担心它

  • 将代码分成适当的函数-您在
    函数1
    中做得很好。它能很好地执行任务,即从用户那里获取一个数字并返回。现在让我们用这个数字。在案例1之后,让我们写下

    arr[numCount]=function1();
    numCount+=1

    这会将数组中第一个未使用的条目设置为输入的数字,然后增加计数器中的元素数

  • 不要执行不必要的计算-让我们想想如何实现最高和最低功能。一种方法是在每次调用函数时遍历整个数组,并跟踪我们看到的最大数量。这是可行的,但我们最终会重复很多工作。如果每次我们得到一个新的数字,我们都会更新我们看到的当前最高和最低的数字呢

  • 使用循环扫描阵列-要计算平均值,我们将使用for循环。如果您不理解,请查阅文档


  • 我认为您可以看到如何将这种思想扩展到计算输入值的平均值。这是我修改后得到的-。

    菜单的显示应该在一个循环中,然后当scanf()返回值时,1)检查scanf()返回的值(在本例中不是参数)是否为1。否则,在读取EOF或“\n”之前,请使用getchar()重新显示菜单。2) 成功扫描()后,检查读取的值是否在1…5范围内。如果不在该范围内,循环将再次显示菜单(可能是在显示错误消息之后。switch语句中默认情况的末尾应该有一个'break;'语句。谢谢!不过我有两个问题。1.你是如何声明变量new number的?只需在void函数中定义它就可以了?2.可以告诉我们有关INT_MAX的更多信息吗?我以前没有见过使用过。我知道如果我设置lowest=0,而不是使用INT MAX,它总是说最低的数字是零。newNum是一个参数,当你调用它时,你可以将它传递到括号中的函数中。它只存在于函数体中。我建议你找一个关于C中函数的教程来解释这一点。INT_MAX是一个大函数的快捷方式整数可以在您的计算机上使用的est值。请思考为什么将最低值设置为0不起作用。您希望首先将其初始化为一个非常大的数字,然后将任何未来的值与该值进行比较。