原文: https://www.programiz.com/c-programming/c-goto-statement

在本教程中,您将学习在 C 编程中创建goto语句。 此外,您还将学习何时使用goto语句以及何时不使用它。

goto语句允许我们将程序的控制权转移到指定的标签。


goto语句的语法

  1. goto label;
  2. ... .. ...
  3. ... .. ...
  4. label:
  5. statement;

label是一个标识符。 遇到goto语句时,程序的控制跳至label:并开始执行代码。

C `goto`语句 - 图1


示例:goto语句

  1. // Program to calculate the sum and average of positive numbers
  2. // If the user enters a negative number, the sum and average are displayed.
  3. #include <stdio.h>
  4. int main() {
  5. const int maxInput = 100;
  6. int i;
  7. double number, average, sum = 0.0;
  8. for (i = 1; i <= maxInput; ++i) {
  9. printf("%d. Enter a number: ", i);
  10. scanf("%lf", &number);
  11. // go to jump if the user enters a negative number
  12. if (number < 0.0) {
  13. goto jump;
  14. }
  15. sum += number;
  16. }
  17. jump:
  18. average = sum / (i - 1);
  19. printf("Sum = %.2f\n", sum);
  20. printf("Average = %.2f", average);
  21. return 0;
  22. }

输出

  1. 1\. Enter a number: 3
  2. 2\. Enter a number: 4.3
  3. 3\. Enter a number: 9.3
  4. 4\. Enter a number: -2.9
  5. Sum = 16.60
  6. Average = 5.53

避免goto的原因

使用goto语句可能会导致错误且难以理解的代码。 例如,

  1. one:
  2. for (i = 0; i < number; ++i)
  3. {
  4. test += i;
  5. goto two;
  6. }
  7. two:
  8. if (test > 5) {
  9. goto three;
  10. }
  11. ... .. ...

同样,goto语句允许您执行不良操作,例如跳出示波器范围。

话虽如此,goto有时会有用。 例如:打破嵌套循环。


您应该使用goto吗?

如果您认为使用goto语句简化了程序,则可以使用它。 话虽这么说,goto很少有用,您可以不使用goto一起创建任何 C 程序。

这是 C++ 的创建者 Bjarne Stroustrup 的话“goto可以做任何事情的事实正是我们不使用它的原因”。