欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

在學(xué)習(xí)和回顧該知識前,已經(jīng)掌握了if語句的結(jié)構(gòu)和用法。

if (條件)
    語句;

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

1、while語句結(jié)構(gòu)

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

例子:利用循環(huán)結(jié)構(gòu)打印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是什么結(jié)果

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

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

運(yùn)行結(jié)果為:

1 2 3 4

將break改為continue看看,發(fā)現(xiàn)運(yùn)行結(jié)果為:

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

2、代碼示例

示例一:

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

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

運(yùn)行結(jié)果如下:

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

a
a
A
A
^Z

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

測試getchar的功能

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

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

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

示例二:

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

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

運(yùn)行該代碼的結(jié)果如下:

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

顯然,該代碼是存在錯(cuò)誤的。還沒等輸入Y/N,就提示確認(rèn)失敗了。這是為甚呢?因?yàn)槲覀冊阪I盤上鍵入“2022”之后,還會鍵入一個(gè)回車,此時(shí)放到緩沖區(qū)就放的是“2022\n”。

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

如何修正程序呢?

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

代碼如下:

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

運(yùn)行結(jié)果為:

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

這時(shí)候?qū)τ谶B續(xù)的密碼輸入來說是正確運(yùn)行的,那么對于不連續(xù)(中間有空格)的呢?

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

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

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

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

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

示例三:

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

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

1
1
3
3
9
9
^Z

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

相關(guān)文章

  • 使用C++17實(shí)現(xiàn)JSON庫設(shè)計(jì)思路示例全解

    使用C++17實(shí)現(xiàn)JSON庫設(shè)計(jì)思路示例全解

    這篇文章主要為大家介紹了使用C++17實(shí)現(xiàn)JSON庫設(shè)計(jì)思路示例全解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • c++讀取和寫入TXT文件的整理方法

    c++讀取和寫入TXT文件的整理方法

    今天小編就為大家分享一篇c++讀取和寫入TXT文件的整理方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • c++ 封裝一個(gè)截圖服務(wù)

    c++ 封裝一個(gè)截圖服務(wù)

    這篇文章主要介紹了c++ 封裝一個(gè)截圖服務(wù)的方法,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2021-01-01
  • C語言實(shí)現(xiàn)高精度減法

    C語言實(shí)現(xiàn)高精度減法

    高精度的本質(zhì)是將數(shù)字以字符串的形式讀入,然后將每一位分別存放入int數(shù)組中,通過模擬每一位的運(yùn)算過程,來實(shí)現(xiàn)最終的運(yùn)算效果,下面我們就來看看C語言如何實(shí)現(xiàn)高精度減法吧
    2023-11-11
  • string,CString,char*之間的轉(zhuǎn)化

    string,CString,char*之間的轉(zhuǎn)化

    下面是MFC/C++/C中字符類型CString, int, string, char*之間的轉(zhuǎn)換的說明與舉例,經(jīng)常用的東西,相信對于用C/C++的朋友,還是比較有用的
    2013-03-03
  • 深入解析C語言中常數(shù)的數(shù)據(jù)類型

    深入解析C語言中常數(shù)的數(shù)據(jù)類型

    C語言中常數(shù)的數(shù)據(jù)類型,需要的朋友可以過來參考下。希望對大家有所幫助
    2013-10-10
  • VC6.0常用快捷鍵大全

    VC6.0常用快捷鍵大全

    這篇文章主要介紹了VC6.0常用快捷鍵大全,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • 詳解C++編程中類模板的相關(guān)使用知識

    詳解C++編程中類模板的相關(guān)使用知識

    這篇文章主要介紹了詳解C++編程中類模板的相關(guān)使用知識,包括函數(shù)的參數(shù)類型替換等方法,需要的朋友可以參考下
    2015-09-09
  • C++11/14 線程調(diào)用類對象和線程傳參的方法

    C++11/14 線程調(diào)用類對象和線程傳參的方法

    這篇文章主要介紹了C++11/14 線程調(diào)用類對象和線程傳參的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • C++實(shí)現(xiàn)控制臺版掃雷程序

    C++實(shí)現(xiàn)控制臺版掃雷程序

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)控制臺版掃雷程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評論