最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言示例講解while循環(huán)語句的用法

 更新時間:2022年06月13日 15:51:33   作者:要努力丫!  
在不少實際問題中有許多具有規(guī)律性的重復操作,因此在程序中就需要重復執(zhí)行某些語句。一組被重復執(zhí)行的語句稱之為循環(huán)體,C語言while語句可以是單個語句,也可以是一個語句塊,其條件可以是任意表達式,true是任意非零值,當條件為真時,循環(huán)進行迭代

在學習和回顧該知識前,已經掌握了if語句的結構和用法。

if (條件)
    語句;

當條件滿足的情況下,if結構中的語句執(zhí)行,且只執(zhí)行一次;條件不滿足則不執(zhí)行。但是生活中常常需要將一件事情完成很多次,這時候就要用到while語句來實現循環(huán)了。

1、while語句結構

while (表達式)
    循環(huán)語句;

例子:利用循環(huán)結構打印1-10

#include <stdio.h>
int main()
{
	int i = 0;
	while(i < 10)
	{
		i++;
		printf("%d ", i);
	}
	return 0;
}

 1 2 3 4 5 6 7 8 9 10

來測試一下在代碼中分別加入continue和break是什么結果

在while循環(huán)中,break用于永久地終止循環(huán)

int main()
{
	int i = 1; //初始化
	while (i <= 10) //判斷部分
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i++;   //循環(huán)變量的調整部分  
	}
	return 0;
}

運行結果為:

1 2 3 4

將break改為continue看看,發(fā)現運行結果為:

輸出4之后,光標持續(xù)閃爍,因為在while循環(huán)中,continue的作用是跳過本次循環(huán)continue后面的代碼(這樣就跳過了printf("%d ", i);i++; 這兩條語句),直接程序又去到判斷部分,看是否進行下一次循環(huán)。

2、代碼示例

示例一:

看一下下面這段代碼是什么意思

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
		putchar(ch);
	return 0;
}

運行結果如下:

輸入什么字母就會輸出什么字母,想要退出該程序的運行,就使用快捷鍵“ctrl + z”。

a
a
A
A
^Z

getchar這個是指如果讀取成功的話,返回的是ASCII碼值,若讀取失敗,則返回的是EOF(end of file),是文件結束標志。

測試getchar的功能

int main()
{
	int ch = getchar();
	printf("%c\n",ch);
	//putchar(ch);//這條語句與上一條語句一樣的意思
	return 0;
}

運行該測試代碼,在打印結果的窗口,鍵入一個A字符回車,就會打印出A字符。(putchar是指輸出一個字符)

在getchar和鍵盤之間有一個緩沖區(qū),鍵入字符“A”就相當于將“A\n”放進了緩沖區(qū)里面。

示例二:

假設輸入一段字符作為密碼,將該密碼存放到字符串passwd里面,然后彈出一個“請確認密碼”的提示,如果確認密碼正確就鍵入“Y”,輸出“確認成功”;否則鍵入“N”,輸出“確認失敗”。編寫的代碼如下:

int main()
{
	char passwd[20] = { 0 };
	printf("請輸入密碼:>");
	scanf("%s",passwd);//假設輸入的密碼是2022
	//這里passwd不取地址的原因是passwd是個數組,數組的數組名本身就是個地址,所以
	//此處沒有給passwd加上取地址符
	printf("請確認密碼(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("確認成功\n");
	}
	else
	{
		printf("確認失敗\n");
	}
	return 0;
}

運行該代碼的結果如下:

請輸入密碼:>2022
請確認密碼(Y/N):>確認失敗

顯然,該代碼是存在錯誤的。還沒等輸入Y/N,就提示確認失敗了。這是為甚呢?因為我們在鍵盤上鍵入“2022”之后,還會鍵入一個回車,此時放到緩沖區(qū)就放的是“2022\n”。

而scanf與getchar是輸入函數,它們不是直接從鍵盤上拿數據,而是從中間的緩沖區(qū)去拿數據,如果緩沖區(qū)沒有數據,它就會等待從鍵盤上輸入一點信息到緩沖區(qū)里面去。scanf只會將緩沖區(qū)里面的“2022\n”里的“2022”拿走,緩沖區(qū)里面還剩下“\n”;getchar在讀取的時候,就沒有作等待動作,直接將緩沖區(qū)里面的“\n”拿走了,所以還么等我們輸入Y/N,就已經打印了“確認失敗”。

如何修正程序呢?

將執(zhí)行scanf之后的緩沖區(qū)里面的“\n”拿走,也就是將緩沖區(qū)清理干凈,這樣的話getchar函數就得等待輸入,就可以正確運行了。

代碼如下:

int main()
{
	char passwd[20] = { 0 };
	printf("請輸入密碼:>");
	scanf("%s",passwd);//假設輸入的密碼是2022
	printf("請確認密碼(Y/N):>");
	//清理緩沖區(qū)
	getchar();//處理'\n'
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("確認成功\n");
	}
	else
	{
		printf("確認失敗\n");
	}
	return 0;
}

運行結果為:

請輸入密碼:>2022
請確認密碼(Y/N):>Y
確認成功

這時候對于連續(xù)的密碼輸入來說是正確運行的,那么對于不連續(xù)(中間有空格)的呢?

比如密碼是“2022 abc”,執(zhí)行結果如下:

請輸入密碼:>2022 abc
請確認密碼(Y/N):>確認失敗

可以看出,程序還是存在紕漏。那么怎么處理呢?這就要將緩沖區(qū)里面的多個字符都給清理干凈。此時只一個getchar函數處理不掉空格以及“\n”了,可以使用while循環(huán),讓它一直讀取,直到將“\n”都讀走。

int main()
{
	char passwd[20] = { 0 };
	printf("請輸入密碼:>");
	scanf("%s",passwd);//假設輸入的密碼是2022
	printf("請確認密碼(Y/N):>");
	清理緩沖區(qū)
	//getchar();//處理'\n'
	//清理緩沖區(qū)中的多個字符
	int tmp = 0;
	while ((tmp = getchar()) != '\n')
	{
		;
	}
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("確認成功\n");
	}
	else
	{
		printf("確認失敗\n");
	}
	return 0;
}

請輸入密碼:>2022 abc
請確認密碼(Y/N):>Y
確認成功

示例三:

//只會打印數字
int main()
{
	int ch;
	while ((ch = getchar()) != EOF)
	{
		if (ch < '0' || ch > '9')
			continue;
		putchar(ch);
	}
	return 0;
}

根據ASCII碼值,我們可以知道該段代碼的意思是:如果不是數字就continue,執(zhí)行continue會跳過putchar(ch)這句話,所以這段代碼最終只會打印輸入的數字,想要終止運行,鍵入“ctrl+z”即可。代碼運行結果如下:

1
1
3
3
9
9
^Z

到此這篇關于C語言示例講解while循環(huán)語句的用法的文章就介紹到這了,更多相關C語言while循環(huán)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++數據結構之list詳解

    C++數據結構之list詳解

    list是一種序列式容器。list容器完成的功能實際上和數據結構中的雙向鏈表是極其相似的,list中的數據元素是通過鏈表指針串連成邏輯意義上的線性表,也就是list也具有鏈表的主要優(yōu)點,即:在鏈表的任一位置進行元素的插入、刪除操作都是快速的
    2021-11-11
  • 獲取C++變量類型的簡單方法

    獲取C++變量類型的簡單方法

    這篇文章主要介紹了獲取C++變量類型的簡單方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • C++超詳細實現堆和堆排序過像

    C++超詳細實現堆和堆排序過像

    堆是計算機科學中一類特殊的數據結構的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數組對象。而堆排序是利用堆這種數據結構所設計的一種排序算法。本文將通過圖片詳細介紹堆排序,需要的可以參考一下
    2022-06-06
  • C語言代碼實現掃雷小游戲

    C語言代碼實現掃雷小游戲

    這篇文章主要為大家詳細介紹了C語言代碼實現掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++中引用傳遞與指針傳遞的區(qū)別(面試常見)

    C++中引用傳遞與指針傳遞的區(qū)別(面試常見)

    這篇文章主要介紹了C++中引用傳遞與指針傳遞的區(qū)別(面試常見),需要的朋友可以參考下
    2018-03-03
  • C語言進階練習二叉樹的遞歸遍歷

    C語言進階練習二叉樹的遞歸遍歷

    樹是一種重要的非線性數據結構,直觀地看,它是數據元素(在樹中稱為結點)按分支關系組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示,本篇介紹二叉樹的遞歸與非遞歸遍歷的方法
    2022-06-06
  • C語言中帶頭雙向循環(huán)鏈表基本操作的實現詳解

    C語言中帶頭雙向循環(huán)鏈表基本操作的實現詳解

    無頭單向非循環(huán)鏈表結構簡單,一般不會單獨用來存數據。而帶頭雙向循環(huán)鏈表的結構較為復雜,一般用在單獨存儲數據。本文將介紹帶頭雙向循環(huán)鏈表的基本操作,需要的可以參考一下
    2022-11-11
  • C++?Boost?weak_ptr智能指針超詳細講解

    C++?Boost?weak_ptr智能指針超詳細講解

    智能指針是一種像指針的C++對象,但它能夠在對象不使用的時候自己銷毀掉。雖然STL提供了auto_ptr,但是由于不能同容器一起使用(不支持拷貝和賦值操作),因此很少有人使用。它是Boost各組件中,應用最為廣泛的一個
    2022-11-11
  • c++代碼調試方式的幾點建議

    c++代碼調試方式的幾點建議

    這篇文章主要介紹了c++代碼調試方式的幾點建議,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下
    2020-08-08
  • 劍指offer之C語言不修改數組找出重復的數字

    劍指offer之C語言不修改數組找出重復的數字

    今天小編就為大家分享一篇關于劍指offer之C語言不修改數組找出重復的數字,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論

台山市| 元江| 巴东县| 当阳市| 定远县| 临夏县| 廉江市| 夏河县| 科技| 万州区| 河曲县| 泗阳县| 莒南县| 江达县| 西盟| 通州市| 凉城县| 建瓯市| 营口市| 行唐县| 武威市| 民丰县| 临夏市| 蕉岭县| 青阳县| 阳泉市| 时尚| 九寨沟县| 武安市| 中山市| 繁峙县| 平凉市| 靖江市| 绿春县| 龙门县| 昌黎县| 郁南县| 和静县| 桂阳县| 新和县| 乌拉特中旗|