zoukankan      html  css  js  c++  java
  • break语句、continue语句、goto语句的用法辨析

    1、break语句

    break语句常使用在switch语句、循环体以及if语句中,它的作用是跳出循环,而且只能跳出一层循环。

              for (i = 0; i < 10; ++j)
    	{
    	for (j = 0; j < 10; ++j)
    	 {
    		++max;
    		if (max == 45) 
    		break;
    	 }
            }
            cout << max<<endl;
    

    如上代码块中,最后输出的max的值是95,当max为45时,利用break语句跳出了内层for循环,此时j的值是4,因为break语句是跳出这一层循环,这一层循环结束,开始判断是否进行外层循环,当再次进入内层for循环时,j的值又被赋值为0,如果没有break语句的话,max应该会自增100次,而因为有break语句,只自增了95次。
    在这里插入图片描述

    2、continue语句

    continue语句可以出现在循环体中,其作用是结束本次循环,不会跳出循环,接着一般会开始判断是否进行下一次循环。

    int i;
    int max=0;
    int j;
    for (i = 0; i < 10; ++i)
    {
      for (j = 0; j < 10; ++j)
      {
        ++max;
        if (max == 45)  
        continue;
        ++max;
      }
    }
    cout << max<<endl;
    

    这次我们原本打算让max自增200次,但是我们在内层循环中增加了一个continue语句。
    在这里插入图片描述
    最终输出的max的值是199,当max的值满足if语句的条件时,continue语句只是终止了这一次循环,而不是终止这一层的循环。

    3、goto语句

    goto语句是一个万能跳转语句,使程序的执行流程跳转到标号语句所指定的语句,但是大量的使用goto语句会破坏程序的结构。

    for (i = 0; i < 10; ++i)
    {
       for (j = 0; j < 10; ++j)
       {
          ++max;
          if (max == 45)
          goto tran;
       }
    }
    tran:
         cout << max<<endl;
    

    这次我们在内层for循环中使用了goto语句,使程序的执行流程跳转到我们的标号语句tran所指定的语句,直接跳过了两层的循环,最后max的值为45。
    在这里插入图片描述

    例题:信息加密/解密小程序

    处理用户从键盘输入的一串字符串,将字符串中的字符'0','1','2','3','4','5','6','7','8','9'分别替换成'9','8','7','6','5','0','1','2','3','4'。

    #define _CRT_SECURE_NOWARNINGS
    #include<iostream>
    #include<string>
    using namespace std;
    void codeString(string &a)
    {
     int i = 0;
     while (a[i] != '')
     {
      switch (a[i])
      {
      case '0':
       a[i] = '9';
       break;
      case '1':
       a[i] = '8';
       break;
      case '2':
       a[i] = '7';
       break;
      case '3':
       a[i] = '6';
       break;
      case '4':
       a[i] = '5';
       break;
      case '5':
       a[i] = '0';
       break;
      case '6':
       a[i] = '1';
       break;
      case '7':
       a[i] = '2';
       break;
      case '8':
       a[i] = '3';
       break;
      case '9':
       a[i] = '4';
       break;
      default:
       break;
      }
      ++i;
     }
    }
    void decodeString(string &a)
    {
     int i = 0;
     while (a[i] != '')
     {
      switch (a[i])
      {
      case '0':
       a[i] = '5';
       break;
      case '1':
       a[i] = '6';
       break;
      case '2':
       a[i] = '7';
       break;
      case '3':
       a[i] = '8';
       break;
      case '4':
       a[i] = '9';
       break;
      case '5':
       a[i] = '4';
       break;
      case '6':
       a[i] = '3';
       break;
      case '7':
       a[i] = '2';
       break;
      case '8':
       a[i] = '2';
       break;
      case '9':
       a[i] = '0';
       break;
      default:
       break;
      }
      ++i;
     }
    }
    int main()
    {
     string  password;//用于存储用户输入的字符串
     int op;
     while (true)
     {
      cout << "please input the string:";//输入字符串
         cin >> password;
      cout << "selecting operation:" << endl;//选择操作
      cout << "1:encrypt." << endl;//加密
      cout << "2:decode" << endl;//解密
      cout << "3:log out" << endl;//退出系统
      cout << "Enter the corresponding operatiom number:";
      cin >> op;
      switch (op)
      {
      case 1:codeString(password);
       cout << "Encrypted string:" << password<<endl;
       break;
      case 2:decodeString(password);
       cout << "Decrypted string:" << password<<endl; 
       break;
      default:goto theend;
      }
     }
     theend:
     system("pause");
     return 0;
    }
    

  • 相关阅读:
    搭建kafka集群
    fluentd 安装、配置、使用介绍
    彻底解决 es 的 unassigned shards 症状
    nginx 反向代理时丢失端口的解决方案
    kubernetes的imagePullSecrets如何生成及使用
    创建MySQL数据库账号
    Linux中查找文件
    Linux快速访问多个目录
    Django查询数据库返回字典dict数据
    linux 将压缩包复制到另外一个文件夹下面
  • 原文地址:https://www.cnblogs.com/TracerLyh/p/11521765.html
Copyright © 2011-2022 走看看