關於goto

goto,即無條件跳轉指令,常與if搭配使用具體使用情況將舉例說明

1

#include <stdio.h>

int main(void)
{
  goto ss;
  printf("BBBB\n");
  
  ss:
  	printf("AAAA\n");

  return 0;
}

輸出結果爲:


    由上面的結果可知,執行goto語句時,會直接跳轉到語句標號(這裏指的是ss)以後的語句,所以第6行代碼沒有被執行

goto語句一直爲人們所詬病,因其使得代碼可讀性變差且不易維護,

然而,正像另一些人說的,在有所限制的情況下使用它也會有一定的方便之處,比如說像下面的例子

2

# include <stdio.h>

int main(void) 
{
	int x;
	int one, two, five;
	
	printf("請輸入你所需要的錢數(只需輸入一個數字,單位爲元):"); 
	scanf("%d", &x);
	for (one=1; one<x*10; one++)
	{
		for (two=1; two<x*10/2; two++)
		{
			for (five=1; five<x*10/5; five++)
			{
				if (one + two*2 + five*5 == x*10)
				{
					printf("可以用%d個1角加%d個2角加%d個5角得到%d元\n", one, two, five, x);
					goto out;
				}
			}
		}
	}
	out:
	return 0;
}  

輸入一個數的結果爲:


    這個程序是判斷需要多少個1角、2角和5角可以組成輸入的錢數,如果註釋掉19行的語句,則會將所有的情況輸出,但是,如果我們只想要一個結果,則需要在一個輸出後結束整個程序,當然,在不使用goto的前提下,我們可以向代碼中添加3break分別將3for循環結束,也可以加上# include <stdlib.h>頭文件後在一個結果輸出後用exit(0) 終止程序,但是,如果使用goto語句,則會相對簡單一些,既可以直接像上面程序那樣,輸出後直接跳轉到最後

goto也可以構成循環

3

# include <stdio.h>

int main(void)
{
	int i = 0;
	ss:
	if (i < 5)
	{
  		printf("最近比較忙\n");
  		if (i == 4)
			return 0;
	}
	
	i++;
  	goto ss;

  	return 0;
}
輸出結果爲:



    對於goto語句,因爲其缺點,而且平時基本用不到,再加上還有switch/case這樣的替代品,所以許多新手根本不會去了解,而且老師們一般也都不講或一句話帶過,說來慚愧,我以前也不知道這個怎麼用的,現在覺得它的確在一些方面有些用處,就記錄一下,如果以後看到相關的更多的知識,會予以補充


【所有代碼均在windows系統下C-Free5.0下運行通過】

(如有錯誤,敬請指正)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章