C 语言中的goto、 break 和 continue 语句使用

2023-05-16

一、goto 语句

goto 语句为无条件跳转,goto 语句后面带一个标识符,该标识符是同一个函数内某条语句的标号。标号可以出现在任何可执行语句的前面,并且以一个冒号“:”作为后缀。

/*************************************************************************
  > File Name: test.c
  > Author: Wenfei6316
  > Mail: 2500873570@qq.com 
  > Created Time: 2018年02月22日 星期四 19时03分59秒
 ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int i, ch;
input:
	printf("Please input a number:\n");
	scanf("%d", &i);
	if (ch = getchar() != '\n')
	{
		while (ch = getchar() != '\n');
		printf("The number you inputted was wrong, please input again!\n");
		goto input;		
	}
	printf("i = %d.\n", i);
	return 0;
}

goto 语句后的标识符不能是关键字。

由于goto 语句无条件跳转,因此会破坏原有的函数的结构性,如果函数比较复杂,很有可能因为goto 跳转会让原本想要实现的某种功能被直接跳过了,同时多重嵌套跳转会让别人比较难读懂程序,故能不用 goto 语句尽量不要用。

二、break 和 continue 语句

1、break 只能使用在循环语句(for(),while(),do...while())和 switch 语句中,if 语句不能直接使用 break,只有当 if 语句在循环语句或 switch  中配合才能使用(其实还是相当于 break 用在循环语句和 switch 语句中),表示直接跳出循环语句或者 switch 语句。

/*************************************************************************
  > File Name: test.c
  > Author: Wenfei6316
  > Mail: 2500873570@qq.com 
  > Created Time: 2018年02月22日 星期四 19时03分59秒
 ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int x = 8;
	for(; x>0; x--)
	{
		if (x%3)
		{
			printf("%d\n,", x--);
			break;
		}
		printf("%d\n,", --x);
	}
	return 0;
}

输出结果:8
/*************************************************************************
  > File Name: test.c
  > Author: Wenfei6316
  > Mail: 2500873570@qq.com 
  > Created Time: 2018年02月22日 星期四 19时03分59秒
 ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char *a = "you";
	char b[] = "Welcome you to China!";
	int i, j=0;
	char *p = NULL;

	for (i=0; b[i]!='\0'; i++)
	{
		if (*a == b[i])
		{
			p = a;
			for (j=i; *p!='\0'; j++)
			{
				if (*p != b[j])
					break;
				p++;
			}
			if (*p == '\0')
				break;
		}
	}
	printf("%s\n", &b[i]);
	return 0;
}

输出结果:you to China!
/*************************************************************************
  > File Name: test.c
  > Author: Wenfei6316
  > Mail: 2500873570@qq.com 
  > Created Time: 2018年02月22日 星期四 19时03分59秒
 ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char *a = "yours";
	char b[] = "Welcome you to China!";
	int i, j=0;
	char *p = NULL;

	for (i=0; b[i]!='\0'; i++)
	{
		if (*a == b[i])
		{
			p = a;
			for (j=i; *p!='\0'; j++)
			{
				if (*p != b[j])
					break;
				p++;
			}
			if (*p == '\0')
				break;
		}
	}
	printf("%s\n", p);
	printf("%s\n", &b[i]);
	return 0;
}

输出结果:rs


2、continue 只能使用在循环语句(for(),while(),do...while())语句中,if 和 switch 语句后不能直接使用 continue,只有当 if 和 switch 语句在循环语句中配合才能使用(其实还是相当于 continue 用在循环语句语句中),表示直接跳出本次循环, 特别注意对于 for 循环 continue 只是把{}后面语句跳出,for 里面的迭代语句(如:i++)仍然执行



/*************************************************************************
  > File Name: test.c
  > Author: Wenfei6316
  > Mail: 2500873570@qq.com 
  > Created Time: 2018年02月22日 星期四 19时03分59秒
 ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int x = 8;
	for(; x>0; x--)
	{
		if (x%3)
		{
			printf("%d\t", x--);
			continue;
		}
		printf("%d\t", --x);
	}
	printf("\n");
	return 0;
}

输出结果:	8	5	4	2
/*************************************************************************
  > File Name: test.c
  > Author: Wenfei6316
  > Mail: 2500873570@qq.com 
  > Created Time: 2018年02月22日 星期四 19时03分59秒
 ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char *a = "you";
	char b[] = "Welcome you to China!";
	int i, j=0;
	char *p = NULL;

	for (i=0; b[i]!='\0'; i++)
	{
		if (*a == b[i])
		{
			p = a;
			for (j=i; *p!='\0'; j++)
			{
				if (*p != b[j])
					continue;
				p++;
			}
			if (*p == '\0')
				break;
		}
	}
	printf("%s\n", &b[i]);
	return 0;
}

输出结果:you to China!
/*************************************************************************
  > File Name: test.c
  > Author: Wenfei6316
  > Mail: 2500873570@qq.com 
  > Created Time: 2018年02月22日 星期四 19时03分59秒
 ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char *a = "you";
	char b[] = "Welcome you to China!";
	int i, j=0;
	char *p = NULL;

	for (i=0; b[i]!='\0'; i++)
	{
		if (*a == b[i])
		{
			p = a;
			for (j=i; *p!='\0'; j++)
			{
				if (*p != b[j])
					continue;
				p++;
			}
			if (*p == '\0')
				continue;
		}
	}
	printf("%s\n", &b[i]);
	return 0;
}

输出结果:
/*************************************************************************
  > File Name: test.c
  > Author: Wenfei6316
  > Mail: 2500873570@qq.com 
  > Created Time: 2018年02月22日 星期四 19时03分59秒
 ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int i;

	for (i=0; i<4; i++)
	{
		printf("When i is: %d\n", i);
		switch (i)
		{
		default:
			printf("******\n");
		case 1:
			printf("*\n");
			break;
		case 2:
			printf("**\n");
			continue;		
		case 3:
			printf("***\n");
			break;
		}
	}
	return 0;
}

输出结果:
When i is: 0
******
*
When i is: 1
*
When i is: 2
**
When i is: 3
***



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 语言中的goto、 break 和 continue 语句使用 的相关文章

  • Switch 语句输出字符串错误

    我遇到了这个基本问题 其中 switch case 与字符串一起使用 Break 语句不在 case 之间使用 但为什么即使它与 case 字符串不匹配 它也会适用于所有 case 所以我很想知道为什么输出是3而不是1 public sta
  • Python的break函数在true时不会结束

    为什么中断不会在 true 时结束并返回到开始处 while True print This is a quiz print What is your name Name input print Hello Name The quiz wi
  • Python中简单的while循环直到break

    什么会是一个非常简单的while循环语句会继续下面的程序直到用户输入 exit 例如 while response exit continue file else break print Thank you good bye I know
  • 如何打破这个 while(true) 循环?

    您好 我试图打破这个循环 并在两个 if 语句都为 true 时返回坐标 然而 循环永远不会结束 我该如何修复它 public static String positionQuery int dim Scanner test in Scan
  • PowerShell:打破嵌套循环

    应该有一个breakPowerShell 中的命令可以通过分配标签退出嵌套循环 只是它不起作用 这是我的代码 timestampServers http timestamp verisign com scripts timstamp dll
  • GOTO 仍然被视为有害吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 每个人都知道迪杰斯特拉 Dijkstra 给编辑的信 转到被认为有害的声明 http portal acm org citation cfm d
  • Python中有标签/goto吗?

    有没有goto或者 Python 中的任何等效项能够跳转到特定的代码行 不 Python 不支持标签和 goto 它是一种 高度 结构化的编程语言
  • 如何在 javascript(或 ecmascript?)中的运行时异常(或错误)上中断?

    我怎样才能在错误时中断 我有一个代码 throw new Error Some error 我正在使用最新版本的 Web Inspector Webkit 和 Firebug Mozilla 这些工具捕获并打印错误 但不会中断 我可能不知道
  • 如何通过简写“if-else”结果来中断循环?

    假设我在循环内有一个简写的 if else 语句 如下例所示 for a b c b c More unnecessary code if the result was true 我想通过条件的结果来打破循环 for a b c b bre
  • 如何通过按键终止 while 循环?

    我正在读取串行数据并使用 while 循环写入 csv 文件 我希望用户一旦觉得已经收集了足够的数据就能够终止 while 循环 while True do a bunch of serial stuff if the user press
  • while循环中的Javascript continue语句导致无限循环

    我正在尝试创建一个while用 continue 语句循环 然而 它似乎导致了无限循环 我不明白为什么 在我看来 下面的代码应该以var tasksToDo然后在 3 处递减至 0 途中跳过数字 2 var tasksToDo 3 whil
  • 请解释一下Labeled statements的用法

    Java 中标记语句的唯一用途是中断和继续吗 您什么时候在程序中使用过标签语句 抱歉 代码片段已被删除 我正在拆分问题 JLS 14 7 标签语句 https docs oracle com javase specs jls se14 ht
  • 后藤此时却出乎意料——批处理

    我正在尝试制作一个基于批处理文本的游戏 但刚开始写就遇到了以前从未遇到过的问题 menu the game menu opens when the game starts cls echo This game is still being
  • Perl 跳出 If 语句

    这个刚刚出现 我如何摆脱困境if陈述 我有一个很长的 if 语句 但有一种情况我可以尽早摆脱它 在循环中我可以这样做 while something last if some condition blah blah blah 但是 我可以对
  • PHP continue 函数内

    这可能非常微不足道 但我一直无法弄清楚 这有效 function MyFunction Do stuff foreach x as y MyFunction if foo bar continue Do stuff echo output
  • PHP 有没有办法在 foreach 中重新启动循环,或更改 switch 中的测试值?

    如果我正在循环一个数组 并且在其中一个循环的中间我发现一些小问题 改变 一些东西 并且需要重试 有没有办法跳回到循环顶部而不从数组中获取下一个值 我怀疑这是否存在 但它会是一些关键字 例如continue or break 事实上 它很像c
  • 使用 goto 的最佳实践

    使用是否正确goto在这段代码中 还有其他选择吗 return ExecuteReader cmd reader gt List
  • F# 从 while 循环中中断

    有什么方法可以做到这一点C C 例如 C 风格 for int i 0 i lt 100 i if i 66 break 最简洁的答案是不 您通常会使用一些高阶函数来表达相同的功能 有许多函数可以让您执行此操作 对应于不同的模式 因此 如果
  • “休息2”是什么意思?

    我总是使用和看到只带有 break 的例子 这是什么意思
  • 非法使用break语句; javascript

    当这个变量达到一定数量时 我希望循环停止 但我不断收到错误 未捕获的语法错误 非法的中断语句 function loop if isPlaying jet1 draw drawAllEnemies requestAnimFrame loop

随机推荐

  • Qt网络通信实战(聊天室小项目TCP实现)

    一 UDP与TCP的区别 用一个表格来显示这两者的区别 比较项TCPUDP是否连接面向连接无连接传输是否可靠可靠不可靠流量控制提供不提供工作方式全双工可以是全双工应用场合大量数据少量数据速度慢 快 我们这里采用TCP 当有新的连接出现时就会
  • 常用坐标系及坐标系之间的变换

    坐标系统 xff1a 有哪些坐标系 xff0c 他们之间的变换矩阵是怎样的 xff1f xff08 主要是3个坐标系 3 个角 xff09 地理坐标系 xff08 n系 xff09 坐标系原点On取为飞行器质心 Xn轴向指向北 xff0c
  • ulimit命令用法详解

    ulimit用来限制每个用户可使用的资源 xff0c 如CPU 内存 句柄等 一 用法 ulimit SHacdefilmnpqrstuvx 限制 参数详解 S xff1a 表示软限制 超出设定的值会告警 H xff1a 表示硬限制 xff
  • java的数组反转

    Java中数组反转一般有两个思路 xff0c 第一个是新建一个临时数组 xff0c 把原来的数组内各值倒着给放进去 public class ArrayReverse public static void main String args
  • Ardupilot移植经验分享(1)

    目录 前言背景为什么写这篇文章移植Ardupilot的方法有两种底层适配提取应用层代码两种方法对比 准备阅读源码阅读官方开发者wiki选择编译平台下载编译源代码切换版本的正确方式编译老版本手动下载编译器修改PATH配置配置ubuntu以支持
  • 国产UOS系统之——安装wxPython

    安装依赖库 xff1a sudo apt get install libgtk 3 dev sudo apt get install libcanberra gtk module sudo apt get install pkg confi
  • OpenHarmonyllvm交叉编译工具链编译介绍

    一 工具链基础介绍 1 1 工具链下载 repo init u https gitee com OpenHarmony manifest git b master m llvm toolchain xml repo sync c repo
  • 一键配置Ubuntu的OpenHarmony基础编译环境

    一键配置Ubuntu的OpenHarmony基础编译环境 一 配置前说明 该更新源仅适用于Ubuntu以下系列 Ubuntu18 04 Ubuntu20 04 Ubuntu22 04 强烈推荐Ubuntu20 04 xff0c 本人使用的一
  • 卸载Proteus后再次安装出错解决办法

    相信有人和我一样 xff0c 在卸载Proteus后再次安装时会跳过下图这一步 然后安装完了注册时会弹出修改注册 LICENCE失败 xff0c 从而导致破解不成功 xff0c 怎么办呢 xff1f 本人解决方法 xff1a 1 首先正常安
  • STM32cubeMx来对单片机串口1进行初始化

    步骤如下 xff1a 打开STM32CubeMX软件并新建一个工程在Pinout amp Configuration选项卡中选择正确的芯片型号 xff0c 然后在Pinout视图中找到串口1相关的引脚 默认情况下 xff0c 串口1使用PA
  • Keil 头文件源程序代码——Math.h

    MATH H Prototypes for mathematic functions Copyright c 1988 2002 Keil Elektronik GmbH and Keil Software Inc All rights r
  • Keil头文件代码—Absacc

    ABSACC H Direct access to 8051 extended 8051 and NXP 8051MX memory areas Copyright c 1988 2010 Keil Elektronik GmbH and
  • reg52.h中直接定义了P3^4等引脚,但是P1^5引脚没有明确表示出来?

    实际上reg52 h中已经定义了 34 sfr P0 61 0x80 sfr P1 61 0x90 sfr P2 61 0xA0 sfr P3 61 0xB0 34 等引脚的地址 xff0c 如果取P1 5的引脚 xff0c 只需要表示成
  • 关于scanf很多人不知道的小秘密

    今天忽然想到一个问题 xff0c 假如我利用scanf想给变量a输入一个 d的整数 xff0c 结果不小心输入了一个字符串yf或者是123ff后会怎么样呢 xff1f 哈哈 xff0c 自己测试了一下 xff0c 结果发现 xff0c 当你
  • 关于sizeof(*p+1)的那些事

    今天老铁在写程序时发现一个意外 xff0c 在char a 61 1 3 5 7 9 p 61 a 程序求sizeof p 43 1 时遇到一些意外 xff0c 本来以为会是1 xff0c 结果却出意料的是4 xff0c 这就有些尴尬了 x
  • 求解完数

    完数的定义 xff1a 一个数如果恰好等于它的因子之和 xff0c 这个数就称为 完数 例如 xff1a 6 61 1 xff0b 2 xff0b 3 如果需要求解1000或者10000以内的所有完数 xff0c 怎么做呢 xff1f 分析
  • 查找100-200以内素数

    只能被1和其本身整除的数称为素数 xff0c 1不是素数 xff0c 因为简单 xff0c 所以不做解释 xff0c 直接上程序 源代码如下 xff1a Search all prime numbers from 101 to 200 in
  • 实现4个按键控制8个LED灯1个数码管程序

    按要求C语言编程 xff0c 实现4个按键控制8个LED灯1个数码管程序 具体要求如下 xff1a 1 按键一 xff0c 清零作用 无论数码管以前显示何内容 xff0c 都归零 xff0c 显示0 xff1b 2 按键二 xff0c 加一
  • Linux 关机/重启指令

    Linux系统下关机指令只有root用户终端才能下达 xff08 Linux里切换用户可以用 su root 输入密码便进入 root 用户 xff09 xff0c 同时其他终端也会接收到 如root用户发出关机指令 其他终端也会收到相应的
  • C 语言中的goto、 break 和 continue 语句使用

    一 goto 语句 goto 语句为无条件跳转 xff0c goto 语句后面带一个标识符 xff0c 该标识符是同一个函数 内某条语句的标号 标号可以出现在任何可执行语句的前面 xff0c 并且以一个冒号 xff1a 作为后缀 gt Fi