我正在阅读我的C教科书,我完全被任何试图理解下面的代码片段所困扰。这本书没有给出一个完整的程序,只说明可变角度是一个双精度的,而angletype是一个int,它将以某种方式决定使用哪种情况?感谢您的帮助。

switch (angletype)
{
 case DEG:
  angle *= PI / 180.0; /* convert to radians */
  /* fall through */
 case RAD:
  while (angle > PI) /* normalise radians */
   angle -= 2.0*PI;
  while (angle < -PI)
   angle += 2.0*PI;
  break;
 default:
  printf("Error: Invalid type\n");
  break;
}

编辑:以下是我到目前为止对片段所做的工作:
#include <stdlib.h>
#include <stdio.h>
#define DEG
#define RAD
#define PI 3.14


void main()
{

int angletype;
double angle;

switch (angletype)
{
 case DEG:
 angle *= PI / 180.0; /* convert to radians */
 /* fall through */
 case RAD:
  while (angle > PI) /* normalise radians */
  angle -= 2.0*PI;
  while (angle < -PI)
  angle += 2.0*PI;
 break;
 default:
 printf("Error: Invalid type\n");
 break;
}

}

我只是想不出一个可以工作的原型。我不确定表达式“(angletype)”和DEG和RAD的大小写将如何交互。

最佳答案

switch语句使用一个整型表达式作为其控件,每个case标签也是一个整型表达式:

switch( some_integer )
{
  case 1: // do something if some_integer == 1
    break;

  case 2: // do something else if some_integer == 2
    break;

  case 3: // do some completely different thing if some_integer == 3
    break;
  ...

  default: // do something else if some_integer isn't a value covered by
           // any of the previous cases
}

switch视为计算的GOTO,而每个case标签都是可能的值之一。
对于这个特定片段,DEGRAD是一些整数值的符号常量,可能定义为
#define DEG 0
#define RAD 1

或类似的。
这个特定的代码片段正在使用弧度进行角度计算,因此它首先检查角度类型,看是否需要将其从度转换为弧度。如果angletypeDEG,则在进行计算之前,它会分支到case DEG:执行转换。如果angletypeRAD,则分支到case RAD:执行计算。如果angletype是任何其他值,它将分支到default并打印错误消息。

08-16 21:04