凡科建設(shè)網(wǎng)站步驟友鏈交換不限內(nèi)容
目錄
1.for循環(huán)
1.雖然while循環(huán)和for循環(huán)本質(zhì)上都可以實現(xiàn)循環(huán),但是它們在使用方法和場合上還是有一些區(qū)別的。
2.while循環(huán)中存在循環(huán)的三個必須條件,但是由于風(fēng)格的問題使得三個部分很可能偏離較遠(yuǎn),這樣 查找修改就不夠集中和方便。所以,for循環(huán)的風(fēng)格更勝一籌;for循環(huán)使用的頻率也最高。
2.break和continue在for循環(huán)中
3.左值和右值
4.do...while()循環(huán)
5.do while循環(huán)中的break和continue
6.小練習(xí)鍛煉一下
1. 計算 n的階乘。
2. 計算 1!+2!+3!+……+10!
3. 在一個有序數(shù)組中查找具體的某個數(shù)字n。(講解二分查找)
4. 編寫代碼,演示多個字符從兩端移動,向中間匯聚。
5. 編寫代碼實現(xiàn),模擬用戶登錄情景,并且只能登錄三次。(只允許輸入三次密碼,如果密碼正確則 提示登錄成,如果三次均輸入錯誤,則退出程序。
1.for循環(huán)
我們已經(jīng)知道了while循環(huán),這次我們就來介紹for循環(huán)呢?
for循環(huán)是一種常見的循環(huán)結(jié)構(gòu),它可以重復(fù)執(zhí)行一段代碼多次,直到特定的條件滿足為止。
它的語法如下:
for (初始化語句; 循環(huán)條件; 循環(huán)后操作)
{ ? ?
????????//執(zhí)行的代碼塊
}
其中,初始化語句用于初始化循環(huán)控制變量,循環(huán)條件是一個布爾表達式,如果為true,則繼續(xù)執(zhí)行循環(huán),否則退出循環(huán),循環(huán)后操作是在每次循環(huán)結(jié)束時執(zhí)行的語句。
for循環(huán)的執(zhí)行過程如下:
1. 執(zhí)行初始化語句。
2. 檢查循環(huán)條件,如果為false,則退出循環(huán),執(zhí)行后續(xù)語句。
3. 執(zhí)行代碼塊。
4. 執(zhí)行循環(huán)后操作。
5. 回到第2步,繼續(xù)執(zhí)行循環(huán),直到循環(huán)條件為false。
for循環(huán)廣泛應(yīng)用于迭代數(shù)組、列表、集合等數(shù)據(jù)結(jié)構(gòu),以及重復(fù)執(zhí)行固定次數(shù)的任務(wù)。
#define _CRT_SECURE_NO_WARNINGS 1//for循環(huán)使用
#include<stdio.h>
int main()
{int i = 0;//打印一次i的值i++;printf("%d\n", i);//當(dāng)我們要多次打印時,這時就需要用到循環(huán)//先用我們上次介紹的whilei = 0;//1.初始化while (i < 10)//2.判斷{i++;//3.調(diào)整printf("%d ", i);}//我們發(fā)現(xiàn)while循環(huán)中由三部分//1.初始化 2.判斷 3.調(diào)整//而這是組成循環(huán)的必要條件//接下來我們看看for語句如何完成上面的while語句i = 0;for (i = 1; i <= 10; i++)// 初始化 判斷 調(diào)整{printf("%d ", i);}//我們發(fā)現(xiàn)for也有1.初始化 2.判斷 3.調(diào)整//所以for語句也具有while語句一樣的循環(huán)功能return 0;
}
既然我們有了while語句可以實現(xiàn)循環(huán),為什么還要推出一個功能相同的for語句呢?
1.雖然while循環(huán)和for循環(huán)本質(zhì)上都可以實現(xiàn)循環(huán),但是它們在使用方法和場合上還是有一些區(qū)別的。
????????for循環(huán)主要用于對一定次數(shù)的重復(fù)操作,特別適用于遍歷數(shù)組或集合,將數(shù)組或集合中的每一個元素作為一個循環(huán)變量使用。同時,for循環(huán)的代碼結(jié)構(gòu)非常緊湊,for()的括號中包含了循環(huán)變量的初始化、循環(huán)條件的判斷和循環(huán)變量的更改,可以在一行代碼中完成循環(huán)的控制,適用于代碼簡潔的場景。
????????而while循環(huán)則主要適用于需要根據(jù)一定的條件來重復(fù)執(zhí)行操作的場景,比如用戶輸入信息的驗證和檢查等。while循環(huán)的代碼結(jié)構(gòu)相對比較靈活,可以根據(jù)不同的需求設(shè)置不同的循環(huán)條件,靈活控制循環(huán)的執(zhí)行。
2.while循環(huán)中存在循環(huán)的三個必須條件,但是由于風(fēng)格的問題使得三個部分很可能偏離較遠(yuǎn),這樣 查找修改就不夠集中和方便。所以,for循環(huán)的風(fēng)格更勝一籌;for循環(huán)使用的頻率也最高。
int i = 0; //實現(xiàn)相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判斷部分
{
????????printf("hehe\n");
? ? ? ? .
? ? ? ? .(省略多行代碼)
? ? ? ? .
????????i = i+1;//調(diào)整部分
}
//實現(xiàn)相同的功能,使用for
for(i=1; i<=10; i++)
{
????????printf("hehe\n");
}
2.break和continue在for循環(huán)中
//代碼1
#include <stdio.h>
int main()
{
?? ?int i = 0;
?? ?for (i = 1; i <= 10; i++)
?? ?{
?? ??? ?if (i == 5)
?? ??? ??? ?break;//跳出循環(huán)
?? ??? ?printf("%d ", i);//1 2 3 4
?? ?}
?? ?return 0;
}
//代碼2
#include <stdio.h>
int main()
{
?? ?int i = 0;
?? ?for (i = 1; i <= 10; i++)
?? ?{
?? ??? ?if (i == 5)
?? ??? ??? ?continue;//跳出本次循環(huán)
?? ??? ?printf("%d ", i);//1 2 3 4 6 7?8 9 10
?? ?}
?? ?return 0;
}
在for循環(huán)里,我們要注意兩個問題:
1. 不可在for 循環(huán)體內(nèi)修改循環(huán)變量,防止 for 循環(huán)失去控制。
#include <stdio.h>
int main()
{int i = 0;for (i = 1; i <= 10; i++){if (i = 5)//if(i=5)將5賦給i,使得if語句括號的內(nèi)容恒為真,造成死循環(huán)//當(dāng)i為1,進入循環(huán),此時又將i=5,由于為真,執(zhí)行continue,不執(zhí)行打印,隨后i++,i=6,進入循環(huán)continue;printf("%d ", i);}return 0;
}
2. 建議for語句的循環(huán)控制變量的取值采用“前閉后開區(qū)間”寫法。
#include<stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i < 10; i++)//前閉后開容易觀察到循環(huán)的次數(shù) - 10次{printf("%d ", arr[i]);}return 0;
}?
接下來,我們來看四個for相關(guān)的代碼,看看為什么
代碼1
#include <stdio.h>
int main()
{
?? ?//代碼1
?? ?for (;;)
?? ?{
?? ??? ?printf("hehe\n");
?? ?}
?? ?return 0;
}
????????這個程序有一個無限循環(huán),它會不停地輸出"hehe",直到程序被手動停止或者出現(xiàn)了某些異常情況。其中的for(;;)這一行是一個無限循環(huán)的語法結(jié)構(gòu),相當(dāng)于while(true)或者while(1),表示循環(huán)條件永遠(yuǎn)為真,因此永遠(yuǎn)不會退出循環(huán)。如果運行這個程序,它會一直輸出"hehe",直到你手動停止它。所以在for語句中,我們一定不要省略判斷條件,否則就會導(dǎo)致程序進入死循環(huán)。
代碼2
#include<stdio.h>
int main()
{
? ? int i = 0;
? ? int j = 0;
? ? //這里打印多少個hehe?
? ? for (i = 0; i < 10; i++)
? ? {
? ? ? ? for (j = 0; j < 10; j++)
? ? ? ? {
? ? ? ? ? ? printf("hehe\n");
? ? ? ? }
? ? }
? ? return 0;
}
????????這個程序會打印100次"hehe",因為它有兩個嵌套的for循環(huán)。外層的循環(huán)從i=0開始,每次循環(huán)增加1,當(dāng)i<10時繼續(xù)執(zhí)行。內(nèi)層的循環(huán)從j=0開始,每次循環(huán)增加1,當(dāng)j<10時繼續(xù)執(zhí)行。因此,內(nèi)層循環(huán)每循環(huán)一次,都會輸出一次"hehe",外層循環(huán)控制內(nèi)層循環(huán)的執(zhí)行次數(shù),因此內(nèi)層循環(huán)總共會執(zhí)行10次,輸出10次"hehe",而外層循環(huán)也會循環(huán)10次,因此總共會輸出100個"hehe"。
代碼3
#include<stdio.h>
int main()
{
? ? int i = 0;
? ? int j = 0;
? ? //如果省略掉初始化部分,這里打印多少個hehe?
? ? for (; i < 10; i++)
? ? {
? ? ? ? for (; j < 10; j++)
? ? ? ? {
? ? ? ? ? ? printf("hehe\n");
? ? ? ? }
? ? }
? ? return 0;
}
這個程序會打印10次"hehe",當(dāng)?shù)谝淮窝h(huán)時,i = 0,內(nèi)循環(huán)開始第一次執(zhí)行進入內(nèi)循環(huán)中,j的值從0到9共10次,會打印10次"hehe",當(dāng)j<10不滿足時,跳到外循環(huán),然后執(zhí)行i++;i=1,進入內(nèi)循環(huán),但是此時內(nèi)循環(huán)的j的值已經(jīng)是10了,j的值沒有重新賦值為零,所以j<10不滿足,就不打印"hehe",之后隨著進行i<10和i++,程序j<10還是不滿足,始終不能打印"hehe"。
代碼4
#include<stdio.h>
int main()
{
?? ?int x, y;
?? ?//使用多余一個變量控制循環(huán)
?? ?for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
?? ?{
?? ??? ?printf("hehe\n");
?? ?}
?? ?return 0;
}
在這個程序中,使用了兩個變量`x`和`y`來控制循環(huán)。其中,變量`x`初始化為0,變量`y`也初始化為0,它們分別作為兩個測試條件。在每次循環(huán)開始前,表達式`++x`和`y++`會分別對它們進行自增1的操作。 循環(huán)的循環(huán)條件是`x < 2 && y < 5`,也就是當(dāng)`x`小于2且`y`小于5時,循環(huán)繼續(xù)執(zhí)行。在每次循環(huán)體中,都會輸出一次字符串"hehe"。當(dāng)`x`自增到2時,循環(huán)條件`x<2`不再成立,循環(huán)退出,本程序就結(jié)束打印"hehe"了。
接下來我們就練習(xí)一下,看看你有沒有掌握
//請問循環(huán)要循環(huán)多少次?
#include <stdio.h>
int main()
{
? ? int i = 0;
? ? int k = 0;
? ? for (i = 0, k = 0; k = 0; i++, k++)
? ? ? ? k++;
? ? return 0;
}
在這個程序中,循環(huán)的循環(huán)條件是`k = 0`,每次循環(huán)都會將變量`k`賦值為0并判斷賦值結(jié)果的真假,因為0被認(rèn)為是“假”,所以循環(huán)條件的結(jié)果永遠(yuǎn)為假,循環(huán)不會進入。因此,這個程序不會循環(huán)一次,直接返回0。上面的k=0,就是那個循環(huán)條件就變?yōu)?了,0為假,程序的循環(huán)條件i就不會滿足。下面舉個例子看看這種寫法的值
?可以看出b=7結(jié)果就是7,所以k=0結(jié)果就是0。
3.左值和右值
在計算機編程中,每一個變量都有一個存儲它的內(nèi)存位置,我們稱之為左值(L-value)。左值可以出現(xiàn)在賦值語句的左邊或右邊。當(dāng)左值出現(xiàn)在賦值語句的左邊時,我們可以把它看做一個存儲值的容器,我們可以給它賦一個新的值,或者修改它的值。
在賦值語句中,右邊的值叫做右值(R-value),它是一個可以被賦給左值的值。右值可以是常量、變量、表達式或函數(shù)調(diào)用的返回值。當(dāng)右值出現(xiàn)在賦值語句的左邊時,它是無效的。
例如,如果我們定義一個變量`a`,那么`a`就是其內(nèi)存位置的左值。當(dāng)我們對`a`進行賦值操作時,`a=10`這個賦值語句中的`10`就是右值,它被賦給了變量`a`,`a`的值變成了`10`。
總之,左值是一個標(biāo)識符,它表示一個存儲值的對象或容器,而右值是一個可以被賦給左值的值。
#include<stdio.h>
int main()
{int a = 10;// a - 左值a = 20;//其實是把20放到a的這塊空間,這里使用的是a的空間// a - 右值int b = a;//其實是使用了a中存放的值,把a中的20存到b中return 0;
}
接下來我們在介紹一個循環(huán)
4.do...while()循環(huán)
????????do...while()循環(huán)是一種循環(huán)結(jié)構(gòu),在循環(huán)體至少執(zhí)行一次后才判斷循環(huán)條件是否為真。它的語法結(jié)構(gòu)如下:
do {
????????循環(huán)體語句塊
} while (循環(huán)條件);
do...while()`循環(huán)先執(zhí)行一次循環(huán)體語句塊,然后判斷循環(huán)條件是否為真,如果循環(huán)條件為真,則繼續(xù)執(zhí)行循環(huán)體語句塊,直到循環(huán)條件為假時退出循環(huán)。
和`while`循環(huán)和`for`循環(huán)不同,`do...while()`循環(huán)的循環(huán)條件在循環(huán)體語句塊后面,因此無論循環(huán)條件是否為真,循環(huán)體至少會被執(zhí)行一次。
//使用do - while()語句打印1-10
#include <stdio.h>
int main()
{int i = 1;//初始化do{printf("%d ", i);i = i + 1;//調(diào)整} while (i <= 10);//判斷return 0;
}
5.do while循環(huán)中的break和continue
#include <stdio.h>
int main()
{
? ? int i = 1;
? ? do
? ? {
? ? ? ? if (5 == i)
? ? ? ? ? ? break;
? ? ? ? printf("%d ", i);//1 2 3 4
? ? ? ? i = i + 1;
? ? } while (i <= 10);? ? return 0;
}
#include <stdio.h>
int main()
{
? ? int i = 1;? ? do
? ? {
? ? ? ? if (5 == i)
? ? ? ? ? ? continue;
? ? ? ? printf("%d ", i);//1 2 3 4 死循環(huán)
? ? ? ? i = i + 1;
? ? } while (i <= 10);? ? return 0;
}
6.小練習(xí)鍛煉一下
1. 計算 n的階乘。
/*1. 計算 n的階乘。5! = 1*2*3*4*5n! = 1-n 累積相乘
*/
#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);//不考慮溢出int i = 0;int num = 1;//產(chǎn)生1-n的數(shù)字然后進行累積相乘for (i = 1; i <= n; i++){num *= i;}printf("%d\n", num);return 0;
}
????????該程序?qū)崿F(xiàn)了計算輸入的正整數(shù)n的階乘。 程序從標(biāo)準(zhǔn)輸入中讀入一個整數(shù)n,然后使用for循環(huán)計算1到n的乘積,并將結(jié)果存儲在變量num中。for循環(huán)中的變量i從1開始,每次循環(huán)將i乘以num,最后num就是1到n所有數(shù)字的乘積,即n的階乘。 最后,程序使用printf函數(shù)將計算結(jié)果打印到標(biāo)準(zhǔn)輸出中,并返回0表示程序正常結(jié)束。 需要注意的是,該程序沒有對計算結(jié)果進行溢出檢查和處理,當(dāng)n比較大時,計算結(jié)果可能會超過int類型的取值范圍。需要使用高精度計算或其他方法來避免溢出。
2. 計算 1!+2!+3!+……+10!
//寫法一
#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);int i = 0;int sum = 0;int num = 1;for (i = 1; i <= n; i++){num *= i;sum += num;}printf("%d\n", sum);return 0;
}//寫法二
#include<stdio.h>
int main()
{int n = 0;int i = 0;int sum = 0;int num = 1;for(n=1;n<=3;n++){for (i = 1; i <= n; i++){num *= i;}sum += num;}printf("%d\n", sum);//15//結(jié)果不對,1!+2!+3!=9//?return 0;
}
????????該程序的目標(biāo)是計算1到3的所有數(shù)字的階乘之和。程序使用兩個嵌套的for循環(huán)實現(xiàn)了該目標(biāo)。
????????內(nèi)層循環(huán)計算一個數(shù)字的階乘并將其累加到sum中,外層循環(huán)控制計算1到3的所有數(shù)字。然而,在計算階乘時,程序沒有將變量num重置為1,導(dǎo)致計算每個數(shù)字的階乘時都是在上一個數(shù)字的階乘的基礎(chǔ)上進行乘法運算,所以程序計算的結(jié)果是錯誤的。
????????例如,第一次循環(huán)時,計算n=1時的階乘,num的值為1,計算1的階乘時sum加上了1。但是在計算n=2時的階乘時,num的值已經(jīng)是1的階乘結(jié)果,即num=1,而不是重新開始計算2的階乘,導(dǎo)致程序計算的結(jié)果錯誤。
????????解決該問題的方法是,在內(nèi)層循環(huán)中,每次計算階乘之前都將num重置為1。
修改后的程序如下:
#include <stdio.h>int main() {int n = 0;int i = 0;int sum = 0;int num = 1;for (n = 1; n <= 3; n++) {num = 1; // 重置num的值為1for (i = 1; i <= n; i++) {num *= i;}sum += num;}printf("%d\n", sum); // 輸出結(jié)果:9return 0; }
現(xiàn)在程序輸出的結(jié)果是正確的,即1的階乘+2的階乘+3的階乘=1+2+6=9。
3. 在一個有序數(shù)組中查找具體的某個數(shù)字n。(講解二分查找)
//這種寫法是遍歷數(shù)組尋找數(shù)字,雖然能找到,但是浪費了數(shù)字有序這個條件
#include<stdio.h>
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//升序的10個數(shù)字int k = 7;//要查找的數(shù)字int i = 0;for (i = 0; i < 10; i++){if (arr[i] == k){printf("找到了,下標(biāo)是:%d\n", i);break;}}if (i == 10)printf("找不到!\n");return 0;
}
//二分查找法
/*1.確定數(shù)組的范圍的前后下標(biāo)begin和end2.根據(jù)begin和end,確定中間的元素的下標(biāo)end3.根據(jù)mid鎖定的元素,和查找的元素比較,確定新的查找范圍4.循環(huán)上面步驟,逐漸縮小begin和end的范圍,確定能否找到k
*/
#include<stdio.h>
int main()
{int arr[] = { 8, 17, 26, 32, 40, 72, 87, 99 };//升序的8個數(shù)字int k = 40;//要查找的數(shù)字int length = sizeof(arr) / sizeof(arr[0]);//確定數(shù)組的元素個數(shù)int begin = 0;int end = length - 1;int flag = 0;while (begin <= end){int mid = (begin + end) / 2;if (arr[mid] < k){begin = mid + 1;}else if (arr[mid] > k){end = mid - 1;}else{printf("找到了,下標(biāo)是:%d\n", mid);flag = 1;break;}}if(flag == 0)printf("找不到!\n");return 0;
}
?????????該程序?qū)崿F(xiàn)了二分查找法,用于在一個已知的升序數(shù)組中查找一個特定的數(shù)k。 程序的基本思路是將查找范圍不斷縮小,直到找到k或者查找范圍變?yōu)榭铡?程序首先定義了一個有序的整型數(shù)組arr,并確定數(shù)組的元素個數(shù)length,以及要查找的數(shù)字k。然后定義begin和end表示查找的范圍,一開始為數(shù)組的第一個和最后一個元素的下標(biāo)。 程序使用while循環(huán)進行查找,每次循環(huán)將查找范圍縮小一半。在每次循環(huán)中,程序使用mid表示查找范圍中間元素的下標(biāo),并將k與arr[mid]進行比較。如果k小于arr[mid],則說明要查找的數(shù)字在mid的左邊,將end賦值為mid-1;如果k大于arr[mid],則說明要查找的數(shù)字在mid的右邊,將begin賦值為mid+1;如果k等于arr[mid],則說明找到了k,打印出mid的值,并設(shè)置flag為1表示找到了k。 當(dāng)查找結(jié)束時,程序判斷flag的值,如果為0,則說明沒有找到k,輸出“找不到!”。 需要注意的是,程序的正確性要求數(shù)組是有序的,并且每次循環(huán)都將查找范圍縮小一半,所以時間復(fù)雜度為O(log n)。
4. 編寫代碼,演示多個字符從兩端移動,向中間匯聚。
/*輸出格式:w##########################!we########################!!wel######################!!!welc####################a!!!welco##################ba!!!welcom################oba!!!welcome##############aoba!!!welcome ############iaoba!!!welcome t##########xiaoba!!!welcome to########uxiaoba!!!welcome to ######huxiaoba!!!welcome to b####nhuxiaoba!!!welcome to be##enhuxiaoba!!!welcome to benbenhuxiaoba!!!兩組數(shù)據(jù)welcome to benbenhuxiaoba!!!############################left right
*/#include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{char arr1[] = "welcome to benbenhuxiaoba!!!";char arr2[] = "############################";int left = 0;int right = strlen(arr1) - 1;while (left <= right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);Sleep(1000);//休息1000毫秒left++;right--;}return 0;
}
????????這段程序的功能是:輸出一個類似于懸掛字的效果,將一段字符串從兩端向中間逐步顯示。 程序首先定義了兩個字符數(shù)組arr1和arr2,分別為原始字符串和顯示效果。同時定義了兩個索引left和right,分別表示顯示效果的左側(cè)和右側(cè)位置。初始時左側(cè)位置為0,右側(cè)位置為原始字符串長度減一。 然后進入while循環(huán),循環(huán)條件是左側(cè)位小置于等于右側(cè)位置。在每次循環(huán)中,將arr1的左側(cè)和右側(cè)字符分別賦值給arr2的左側(cè)和右側(cè)位置,輸出arr2,并使用Sleep函數(shù)暫停1000毫秒(即1秒),使效果更明顯。然后分別將左側(cè)位置和右側(cè)位置向中間移動一個位置。由于每次循環(huán)都會將顯示效果向中間顯示一位,所以最終輸出的結(jié)果為原始字符串從兩側(cè)向中間逐漸顯示的效果。 需要注意的是,Sleep函數(shù)是Windows API提供的函數(shù),可以讓程序暫停一定的時間,單位是毫秒。在這段程序中,使用Sleep函數(shù)可以讓效果看起來更加流暢自然。
5. 編寫代碼實現(xiàn),模擬用戶登錄情景,并且只能登錄三次。(只允許輸入三次密碼,如果密碼正確則 提示登錄成,如果三次均輸入錯誤,則退出程序。
#include<stdio.h>
int main()
{char password[20] = { 0 };int i = 0;do{printf("請輸入密碼:>");scanf("%s", password);//兩個字符串比較不能使用等號//需要使用庫函數(shù)strcmp//strcmp返回值 = 0,表示字符串1 = 字符串2//strcmp返回值 > 0,表示字符串1 > 字符串2//strcmp返回值 < 0,表示字符串1 < 字符串2if (strcmp(password, "123456") == 0){printf("密碼正確\n");break;}else{printf("密碼錯誤\n");}i++;} while (i < 3);if (i == 3){printf("登錄失敗\n");}return 0;
}
????????這段程序的功能是:讓用戶輸入密碼,如果輸入的密碼是123456,則認(rèn)為密碼正確,程序結(jié)束;否則,提示密碼錯誤并要求重新輸入。當(dāng)用戶連續(xù)輸入密碼錯誤超過3次時,程序?qū)⑼顺觥?/p>
????????程序首先定義了一個長度為20的字符數(shù)組password,用于存儲用戶輸入的密碼。然后使用do-while循環(huán),循環(huán)條件為i<3,即用戶最多可以輸入3次密碼。在每次循環(huán)中,程序會提示用戶輸入密碼,并使用scanf函數(shù)將輸入的密碼保存到password數(shù)組中。接著使用strcmp函數(shù)比較用戶輸入的密碼和正確的密碼是否相同,如果相同則輸出"密碼正確"并跳出循環(huán);否則輸出"密碼錯誤"。
????????在每次循環(huán)結(jié)束后,程序會將i加1。當(dāng)i等于3時,表示用戶已經(jīng)連續(xù)輸入3次密碼錯誤,此時程序?qū)⑤敵?#34;登錄失敗"并結(jié)束運行。如果用戶在前3次內(nèi)輸入了正確的密碼,則程序會在循環(huán)中使用break語句跳出循環(huán),然后輸出"密碼正確"。
????????需要注意的是,字符串比較時不能使用等號,需要使用庫函數(shù)strcmp。strcmp函數(shù)的返回值為0表示兩個字符串相同,返回值大于0表示第一個字符串大于第二個字符串,返回值小于0表示第一個字符串小于第二個字符串。在本程序中,如果strcmp函數(shù)的返回值為0,則表示用戶輸入的密碼是正確的,程序?qū)⑤敵?#34;密碼正確"并結(jié)束運行。