C語言如何實現(xiàn)循環(huán)輸入
C語言實現(xiàn)循環(huán)輸入
根據(jù)次數(shù)循環(huán)輸入
根據(jù)循環(huán)次數(shù)輸入
首先輸入循環(huán)次數(shù),然后可進行多次輸入,注意:循環(huán)條件是n --,而不是 – n;具體區(qū)別是n --的值是n,而-- n的值是n-1,這樣導(dǎo)致-- n的循環(huán)次數(shù)會少1;
#include <stdio.h> int main(int argc, char const *argv[]) { ?? ?int n; ? ? int w; ?? ?scanf("%d", &n);?? ?//確定循環(huán)n次 ?? ?while(n --){?? ??? ??? ?//while循環(huán)條件是括號中的值不為0則進行循環(huán),所以直接每次循環(huán)后都減一; ?? ??? ?printf("%d循環(huán)\n", n); ? ? ? ? scanf("%d", &w); ? ? ? ? printf("%d\n", w); ?? ?} ?? ?return 0; }
根據(jù)條件循環(huán)輸入
1.死循環(huán)輸入
while循環(huán)條件是括號中的值為不為0則進行循環(huán),所以直接為1,可以直接開始循環(huán)。然后可以循環(huán)輸入。當(dāng)滿足n等于10的條件是就會跳出循環(huán)。
#include <stdio.h> int main(int argc, char const *argv[]) { ?? ?int n; ?? ?while(1){?? ??? ??? ?//while循環(huán)條件是括號中的值為1則進行循環(huán),所以直接為1,可以直接開始循環(huán) ?? ??? ?scanf("%d", &n); ?? ??? ?printf("%d\n", n); ?? ? ?? ??? ?if (n == 10)?? ?//跳出循環(huán)的條件,可以沒有,最好要有,要不然死循環(huán)。 ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?return 0; }
2.直接while(scanf(""))
首先我們要清楚scanf()函數(shù)的返回值:
scanf()的返回值是int型;返回值的大小是按正確輸入格式進行輸入的個數(shù)。
其次我們也會遇到EOF的形式:
EOF是end of file的簡稱說明是已經(jīng)是文件末了,通常是用-1代替EOF。EOF在輸入時是^Z(即ctrl+Z)。
當(dāng)然也有可能是用逗號運算符:
即括號里面的值為逗號后面的值。
scanf()也常與邏輯運算符一起使用:
上代碼:
#include <stdio.h> int main(int argc, char const *argv[]) { ?? ?int n; ?? ?//==========輸入的n不為0==========// ?? ?while(scanf("%d", &n), n){?? ??? ??? ?//while循環(huán)條件是括號中的值不為0則進行循環(huán),所以直接每次循環(huán)后都減一; ?? ??? ?printf("%d\n", n); ?? ?} ?? ?while(scanf("%d", &n)&&n!=0){ ?? ??? ?printf("%d\n", n); ?? ?} ?? ?int N = 8; ?? ?//==========輸入的n不為N==========// ?? ?while(scanf("%d", &n)&&n!=N){ ?? ??? ?printf("%d\n", n); ?? ?} ?? ?while(scanf("%d", &n), n != N){ ?? ??? ?printf("%d\n", n); ?? ?} ?? ?while(scanf("%d", &n)){ ?? ??? ?if (n == N) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?printf("%d\n", n); ?? ?} ?? ?//==========輸入的n全都符合格式====// ?? ?while(scanf("%d", &n) == 1){ ?? ??? ?printf("%d\n", n); ?? ?} ?? ?//==========輸入的n一直到文件尾====// ?? ?while(scanf("%d", &n)!=EOF){ ?? ??? ?printf("%d\n", n); ?? ?} ?? ?while(scanf("%d", &n)!=-1){ ?? ??? ?printf("%d\n", n); ?? ?} ?? ? ?? ?return 0; }
C語言之循環(huán)語句
一. while
while 語句,可以實現(xiàn)循環(huán)
//while 語法結(jié)構(gòu) while(表達(dá)式) ?循環(huán)語句; //表達(dá)式為真執(zhí)行循環(huán)語句,表達(dá)式為假則不執(zhí)行循環(huán)語句
在屏幕上打印1-10的數(shù)字
#include <stdio.h> int main() { ?int i = 1; ?while(i<=10) ?{ ?printf("%d ", i); ?i = i+1; ?} ?return 0; }
1. while語句中的break
//break 代碼實例 #include <stdio.h> int main() { ?int i = 1; ?while(i<=10) ?{ ?if(i == 5) ?break; printf("%d ", i); ?i = i+1; ?} ?return 0; } //輸出 1 2 3 4?
總結(jié):
break在while循環(huán)中的作用:
其實在循環(huán)中只要遇到break,就停止后期的所有的循環(huán),直接終止循環(huán)。 所以:while中的break是用于永久終止循環(huán)的。
2. while語句中的continue
//continue 代碼實例1 #include <stdio.h> int main() { ?int i = 1; ?while(i<=10) ?{ ?if(i == 5) ?continue; ?printf("%d ", i); ?i = i+1; ?} ?return 0; } //輸出 1 2 3 4 (程序中在5處死循環(huán)且不輸出5) ? ? //continue 代碼實例2 #include <stdio.h> int main() { ?int i = 1; ?while(i<=10) ?{ ? ? i = i+1; ? ? if(i == 5) ? ? ? ? ?continue; ? ? printf("%d ", i); ?} ?return 0; } //輸出 2 3 4 6 7 8 9 10
總結(jié):
continue在while循環(huán)中的作用就是:
continue是用于終止本次循環(huán)的,也就是本次循環(huán)中continue后邊的代碼不會再執(zhí)行, 而是直接跳轉(zhuǎn)到while語句的判斷部分。進行下一次循環(huán)的入口判斷
//代碼什么意思? //代碼1 #include <stdio.h> int main() { ?int ch = 0; ?while ((ch = getchar()) != EOF) ? ? ? ?putchar(ch); ? ? return 0; } ? //這里的代碼適當(dāng)?shù)男薷氖强梢杂脕砬謇砭彌_區(qū)的. //scanf/getchar并不是讓鍵盤輸入,而是從緩存區(qū)獲取字符,而緩存區(qū)無字符才等待鍵盤錄入 //scanf不讀取'\n'和' '(空格),而getchar讀取'\n',而gets讀取' '(空格) //修改如下: //清理緩存區(qū) int temp = 0; while ((temp = getchar()) != '\n') { ? ? ;//空語句 } ?? ? //代碼2 #include <stdio.h> int main() { ? ? char ch = '\0'; ?while ((ch = getchar()) != EOF) ?{ ? ? ?if (ch < ‘0' || ch > ‘9') ? ? ? ? continue; ? ? ?putchar(ch); ?} ?return 0; } //這個代碼的作用是:只打印數(shù)字字符,跳過其他字符的、
二. for
1. 語法
for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3) ?循環(huán)語句;
表達(dá)式1
- 表達(dá)式1為初始化部分,用于初始化循環(huán)變量的。
表達(dá)式2
- 表達(dá)式2為條件判斷部分,用于判斷循環(huán)時候終止。
表達(dá)式3
- 表達(dá)式3為調(diào)整部分,用于循環(huán)條件的調(diào)整
使用for循環(huán) 在屏幕上打印1-10的數(shù)字
#include <stdio.h> int main() { ?int i = 0; ?//for(i=1/*初始化*/; i<=10/*判斷部分*/; i++/*調(diào)整部分*/) ?for(i=1; i<=10; i++) ?{ ?printf("%d ", i); ?} ?return 0; }
2. for與while的對比
int i = 0; //實現(xiàn)相同的功能,使用while i=1;//初始化部分 while(i<=10)//判斷部分 { ?printf("hehe\n"); ?i = i+1;//調(diào)整部分 } //實現(xiàn)相同的功能,使用while for(i=1; i<=10; i++) { ?printf("hehe\n"); }
可以發(fā)現(xiàn)在while循環(huán)中依然存在循環(huán)的三個必須條件,但是由于風(fēng)格的問題使得三個部分很可能偏離較遠(yuǎn),這樣查找修改就不夠集中和方便。所以,for循環(huán)的風(fēng)格更勝一籌;for循環(huán)使用的頻率也最高
3. for語句中的break和continue
//代碼1 #include <stdio.h> int main() { ?int i = 0; ?for(i=1; i<=10; i++) ?{ ?if(i == 5) ?break; ?printf("%d ",i); ?} ?return 0; } ? ? //代碼2 #include <stdio.h> int main() { ?int i = 0; ?for(i=1; i<=10; i++) ?{ ?if(i == 5) ?continue; ?printf("%d ",i); ?} ?return 0; }
4. for語句的循環(huán)控制變量
建議:
1. 不可在for 循環(huán)體內(nèi)修改循環(huán)變量,防止 for 循環(huán)失去控制。
int main() { ? ? int i = 0; ? ? for (i = 0; i < 10; i++) ? ? { ? ? ? ? i = 0;//i=0讓每次進來的i賦值后都為0,導(dǎo)致該循環(huán)變成死循環(huán) ? ? ? ? printf("hehe\n"); ? ? } ? ? return 0; }
2. 建議for語句的循環(huán)控制變量的取值采用“前閉后開區(qū)間”寫法
int i = 0; //前閉后開的寫法 for(i=0; i<10; i++) {} //兩邊都是閉區(qū)間 for(i=0; i<=9; i++) {}
5. 一些for循環(huán)的變種
#include <stdio.h> int main() { //代碼1 //for的初始化,判斷,調(diào)整都可以省略 //中間的判斷部分如果省略,意味著判斷恒為真,就構(gòu)成了死循環(huán) ? ? for(;;) ?{ ? ? printf("hehe\n");? ?} //for循環(huán)中的初始化部分,判斷部分,調(diào)整部分是可以省略的,但是不建議初學(xué)時省略,容易導(dǎo)致問題。 ? ?? ? //代碼2 ? ? int i = 0; ? ? int j = 0; ? ? //循環(huán)嵌套,打印9個hehe ? ? for(i=0; i<10; i++) ? ?{ ? ? ? ? for(j=0; j<10; j++) ? ? ? ?{ ? ? ? ? ?printf("hehe\n"); ? ? ? ?} ? ?} ? ? //代碼3 ? ? int i = 0; ? ? int j = 0; ? ? //如果省略掉初始化部分,打印10個hehe ? ? for(; i<10; i++) ? ?{ ? ? for(; j<10; j++)//初始化語句為空語句,當(dāng)?shù)诙窝h(huán)進入時,j仍然為內(nèi)循環(huán)最后一次的10,并非為初識化的0 ? ? ? ?{ ? ? printf("hehe\n"); ? ? ? ?} ? ?} ? ? //代碼4-使用多余一個變量控制循環(huán) ? ? int x, y; ? ? for (x = 0, y = 0; x<2 && y<5; ++x, y++) ? ?{ ? ? ? ? printf("hehe\n"); ? ?} ?return 0; }
6. 筆試題
//循環(huán)要循環(huán)0次 #include <stdio.h> int main() { ?int i = 0; ?int k = 0; //判斷語句寫成賦值語句,k==0才為判斷語句,k=0為假, 循環(huán)0次 ?for(i=0,k=0; k=0; i++,k++) ? ? ? ? k++; ?return 0; }
三. do while
1. 語法
do ?循環(huán)語句; while(表達(dá)式);
2. do語句的特點
循環(huán)至少執(zhí)行一次,使用的場景有限,所以不是經(jīng)常使用
#include <stdio.h> int main() { ?int i = 10; ?do ?{ ?printf("%d\n", i); ?}while(i<10); ?return 0; }
3. do while循環(huán)中的break和continue
?//代碼1 #include <stdio.h> int main() { ?int i = 10; ? ?? ?do ?{ ? ? if(5 == i) ? ? ? ?break; ? ? printf("%d\n", i); ? ? i++; ?}while(i<10); ? ?? ?return 0; } ? ? //代碼2 #include <stdio.h> int main() { ?int i = 10; ? ?? ?do ?{ ? ? if(5 == i) ? ? ? ?continue;//以下語句均被跳過,打印1,2,3,4并 在4處一直打印4(4處死循環(huán)) ? ? ?printf("%d\n", i); ? ? ?i++; ?}while(i<10); ? ?? ?return 0; }
四. goto語句
最常見的用法就是終止程序在某些深度嵌套的結(jié)構(gòu)的處理過程
多層循環(huán)這種情況使用break是達(dá)不到目的的。
它只能從最內(nèi)層循環(huán)退出到上一層的循環(huán)。
goto語言真正適合的場景如下:(goto語句和跳轉(zhuǎn)標(biāo)簽需在一個函數(shù)內(nèi))
for(...) ? ? for(...) ? ?{ ? ? ? ? for(...) ? ? ? ?{ ? ? ? ? ? ? if(disaster) ? ? ? ? ? ? ? ? goto error; ? ? ? ?} ? ?} ? ? … error: ?if(disaster) ? ? ? ? ?// 處理錯誤情況
下面是使用goto語句的一個例子,然后使用循環(huán)的實現(xiàn)方式替換goto語句:
一個關(guān)機程序
#include <stdio.h> int main() { ? ? char input[10] = {0}; ? ? system("shutdown -s -t 60"); again: ? ? printf("電腦將在1分鐘內(nèi)關(guān)機,如果輸入:我是豬,就取消關(guān)機!\n請輸入:>"); ? ? scanf("%s", input); ? ? if(0 == strcmp(input, "我是豬")) ? ?{ ? ? ? ? system("shutdown -a"); ? ?} ? ? else ? ?{ ? ? ? ? goto again; ? ?} ? ? return 0; }
注:cmd操作命令
shutdown -s
:關(guān)機指令shutdown -s -t
時間:設(shè)置關(guān)機倒計時(如60)即60秒后關(guān)機shutdown -a
:取消關(guān)機shutdown -f
:強行關(guān)閉應(yīng)用程序shutdown -m
\\計算機名:控制遠(yuǎn)程計算機shutdown -l
:注銷當(dāng)前用戶(立即關(guān)機)shutdown -r
:關(guān)機并重啟shutdown -r -t
時間:設(shè)置重新啟動倒計時shutdown -h
:休眠
而如果不適用goto語句,則可以使用循環(huán):
#include <stdio.h> #include <stdlib.h> int main() { ? ? char input[10] = {0}; ? ? system("shutdown -s -t 60"); ? ? while(1) ? ?{ ? ? ? ? printf("電腦將在1分鐘內(nèi)關(guān)機,如果輸入:我是豬,就取消關(guān)機!\n請輸入:>"); ? ? ? ? scanf("%s", input); ? ? ? ? if(0 == strcmp(input, "我是豬")) ? ? ? ?{ ? ? ? ? ? ? system("shutdown -a"); ? ? ? ? ? ? break; ? ? ? ?} ? ?} ? ? return 0; }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C/C++?Qt?TreeWidget?單層樹形組件應(yīng)用小結(jié)
TreeWidget?目錄樹組件,該組件適用于創(chuàng)建和管理目錄樹結(jié)構(gòu),在開發(fā)中我們經(jīng)常會把它當(dāng)作一個升級版的ListView組件使用,本文將通過TreeWidget實現(xiàn)多字段顯示,并增加一個自定義菜單,通過在指定記錄上右鍵可彈出該菜單并對指定記錄進行操作2021-11-11C++普通函數(shù)指針與成員函數(shù)指針實例解析
這篇文章主要介紹了C++普通函數(shù)指針與成員函數(shù)指針,很重要的知識點,需要的朋友可以參考下2014-08-08Qt如何設(shè)置窗口屏幕居中顯示以及設(shè)置大小
這篇文章主要介紹了Qt如何設(shè)置窗口屏幕居中顯示以及設(shè)置大小的相關(guān)資料,需要的朋友可以參考下2017-01-01VC實現(xiàn)動態(tài)菜單的創(chuàng)建方法
這篇文章主要介紹了VC實現(xiàn)動態(tài)菜單的創(chuàng)建方法,需要的朋友可以參考下2014-07-07