| 緩衝區
在不同速度的裝置之間傳遞資料需要使用緩衝區。l 陣列scanf函式工作時需要使用乙個叫做輸入緩衝區的緩衝區。
使用者在鍵盤上輸入的內容首先進入緩衝區,程式從輸入緩衝區裡獲得數字。先進入緩衝區裡的數字必須首先處理。
如果使用者輸入的格式和程式要求的不一致,則會導致從這個資料開始的所有陣列都無法處理。
可以使用下面2條語句,把輸入緩衝區裡的錯誤的資料丟棄:
scanf(「*[^\n]」);//把緩衝區第乙個換行字元前的內容丟棄。
scanf(「%*c」);//把換行字元丟棄。
printf函式使用了輸出緩衝區。輸出緩衝區裡的內容在如下四種情況下,才會顯示:
① 如果輸出緩衝區裡有『\n』換行字元,則它前面所有內容顯示在螢幕上;
② 程式結束後,所列印的內容會顯示在螢幕上;
③ 當輸出緩衝區被充滿的時候,裡面的內容會顯示在螢幕上;
④ 在程式中使用fflush(stdout);語句可以把輸出緩衝區裡的內容顯示在螢幕上。
可以用來代表記憶體中一組連續的同型別的儲存區。陣列也需要先宣告,再使用。
因為變數名可以當數用,所以在宣告陣列的時候可以直接用變數名作為下標,即
陣列名[變數名] arr[num] 宣告時為: int arr[num];
宣告陣列的時候需要提供型別名稱和陣列名稱,除此之外還需要乙個儲存區個數。
陣列名[下標] arr[5]
int arr[5] =;//宣告整型陣列arr,包含5個儲存區,即元素個數
陣列一旦存在,則裡面包含的儲存區個數不可改變。
陣列一般不可以作為整體使用,通常一次只能使用其中乙個儲存區。
陣列中每個儲存區都有乙個編號,叫做陣列的下標(或索引)。
下標的範圍從0開始到元素個數減1為止,超過範圍的下標不可以使用(即不能越界)。
下標就可以用來表示陣列中的儲存區。
可以使用for迴圈依次處理陣列中每個儲存區(元素),在這個迴圈裡迴圈變數依次代表元素的下標。
陣列應該初始化:
① 陣列初始化的時候應該把初始化的資料寫在大括號{}裡面,不同數字之間用逗號,分開;
② 計算機把所有初始化資料按照從前到後的順序依次初始化陣列中的每個元素;
③ 如果初始化資料多於元素個數,則多餘的資料會自動忽略;
④ 如果初始化資料少於元素個數,則後面元素自動被初始化成0;
⑤ 如果初始化資料和元素個數一致的時候,則可以省略陣列宣告中的個數,如 int arr = ;
陣列長度是元素的個數,不是整體所佔的位元組數。
陣列名稱不可以代表任何儲存區。
陣列名稱代表的是第乙個儲存區的位址資料。
可以對陣列名稱進行sizeof計算,結果是陣列中所有儲存區所包含的位元組個數的總和。即
sizeof(陣列名)或sizeof(陣列名[0])
練習:把身份證裡前17個號碼分別和這17個數字相乘(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2),把所有乘積求和然後對11取餘,用這個餘數作為編號從下面11個數字中挑出丟應數字(1,0,x,9,8,7,6,5,4,3,2),這個數字就是身份證最後乙個數字上的數字。(即讓使用者逐個輸入17個數字,最後列印出身份證第18位數)
#include int main()
; int code = ; //10代表的是大寫x,即有些身份證最後一位x
int card[17] = {};
int num = 0,sum = 0;
for(num = 0;num < 17;num++)
for(num = 0;num < 17;num++)
if(code[sum % 11] == 10)
printf("你的身份證最後1位校驗碼是x。\n");
else
printf("你的身份證最後1位校驗碼是%d。\n",code[sum % 11]);
return 0;
}
練習:編寫程式從鍵盤上得到乙個非負數,統計出每個數字在各數字上出現的次數,並列印結果到螢幕上。#include int main()
; printf("請輸入乙個數字:");
scanf("%d",&i);
dowhile(i);
for(i = 0;i < 10;i++)
printf("每個位數出現次數為:%d\n",arr[i]);
return 0;
}
【陣列】
陣列可以代表記憶體裡一組連續的同型別儲存區
陣列也需要先宣告後使用
陣列宣告語句中需要包括型別名稱/陣列名稱/陣列包含的儲存區個數
陣列一旦存在則裡面包含的儲存區個數不可以改變
通常不會把陣列當作整體來使用,一次只使用其中的某個儲存區
陣列裡每個儲存區有乙個編號,這個編號叫做陣列的[下標]
第乙個下標的儲存區是0,向後依次遞增
下標的有效範圍從0開始到儲存區個數-1為止,超過範圍的下標不能使用
可以在乙個for迴圈裡依次處理陣列中每個儲存區
這個迴圈裡可以讓迴圈變數代表每個儲存區的下標
陣列應該初始化
初始化陣列的時候需要提供多個初始化資料,1個資料用來初始化1個儲存區
所有初始化資料應該寫在一對大括號裡面,相鄰資料之間用逗號分開
如果初始化資料個數比儲存區個數多,系統會把多餘的資料丟棄
如果初始化資料個數比儲存區個數少,系統會把後面的儲存區初始化為0
如果初始化資料個數與儲存區個數一樣,可以省略陣列宣告中的儲存區個數
【練習】
編寫程式從鍵盤得到多個整數,數量不超過5個;
把他們按照反序顯示在螢幕上;
再計算所有整數的和並顯示在螢幕上。
《思想》
使用者輸入數字數量,然後輸入數字,累加求和,倒序列印
/****/
#include int main()
for(num = i-1; num >= 0; num--)
printf("\n");
printf("求和結果為:%d\n", sum);
return 0;
}
輸入緩衝區與輸出緩衝區
本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...
使用者程序緩衝區和核心緩衝區
常常聽到有程式設計師會跟你討論 我們在讀寫檔案的時候,系統是有快取的 但實際上有一部分人把使用者程序緩衝區和系統空間的緩衝區的概念混淆了,包括這兩種緩衝區的用法和所要解決的問題,還有其它類似的概念。本文就來區分一下不同的緩衝區概念 主要針對類unix平台 使用者程序和作業系統的關係 首先我用一張圖來...
php 緩衝區,PHP的輸出緩衝區
1 什麼是緩衝區?緩衝區的作用是把輸入或者輸出的內容先放進記憶體,而不顯示或者讀取,最本質的作用就是協調高速cpu和相對緩慢的io裝置 磁碟等 的運作。2 php在執行的時候,在什麼地方有用到緩衝區?當執行php的時候,如果碰到了echo print r之類的會輸出資料的 php就會將要輸出的資料放...