當前位置:首頁 » 編程語言 » c語言數據流是幹啥的
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言數據流是幹啥的

發布時間: 2022-05-17 08:41:21

c語言中什麼是流

流是程序輸入或輸出的一個連續的位元組序列,設備(例如滑鼠、鍵盤、磁碟、屏幕、數據機和列印機)的輸入和輸出都是用流來處理的。在C語言中,所有的流均以文件的形式出現----不一定是物理磁碟文件,還可以是對應於某個輸入/輸出源的邏輯文件。

② C語言中,文件的「流」到底是什麼東西 我才學完文件,現在想了解真理。。。

流是指輸入輸出這個過程。 因為數據從設備讀入內存和數據從內存寫入磁碟的過程很像是數據在流動一樣,所以就「形象」 地把這個過程稱為「流」。

流有很多種類的:比如字元串流、文件流等等。

在C++裡面, 流是一個對象,這個對象管理數據輸入輸出的細節。 相應的類 叫做流類。

③ C語言中流是什麼意思

C語言的I/O系統為用戶提供了一個介面,該介面與實際的存取設備無關。只是設備的一個抽象表示形式。這個抽象的介面稱為流,實際的設備稱為文件。

C文件系統可以與各種設備一起使用,如列印機、硬碟、終端等,緩沖文件系統可以將每個設備轉換成邏輯設備,即所謂的流。所有的流工作方式類似,所以很容易操作不同的設備。流有2種類型:文本流和二進制流。

文本流是一系列字元,可以由多行構成,每行由一個換行符終止。

二進制流是一系列位元組,並與外部設備上的位元組一一對應。

④ C語言中流指什麼,不要復制,用自己的理解解釋一下,感謝了

版本四
流 原從stream翻譯來。
什麼電腦外設控制,磁碟文件輸入輸出,只要是輸入或者輸出所產生的數據都是流。
從linux對於硬體設備的控制很容易看出,對於硬體和磁碟上的文件,C語言的操作方法基本上一樣。linux中C語言也是把硬體當做文件進行操作。(本質上,它把外設與txt文本文件看成一類東西。)流的概念的提出,我認為是為了程序對於文本和硬體的一系列操作而設定的統一標准。從程序員角度來看,就不需要知道各個操作的細節,編程的時候,統一把外設都當成文件進行操作就OK了。比如對於音效卡,先OPEN打開,然後write寫入,就完成喇叭發聲,然後close關閉。和對於文本操作基本一樣。

不管對設備或是文件(廣義上都是文件)的輸入輸出操作,而產生的數據,都是I/O流。而C語言中的I/O流能分為兩種:文本流,二進制流。很容易看出文本流控制很二進制流控制的區別。你用TC,fopen打開一個MP3或者別的32位文件,然後讀取,會發現用文本流打開後,文件只能讀到開頭一點點。因為32位音樂文件有很多的'00'數據,文本流會把它當做文件結束符而結束讀取。而二進制流打開方式則可以從頭讀到尾。(這時候輸出的時候可能存在點問題,實驗的時候可以用二進制 流方式再寫入到另外一個文件來觀察。)
流是由輸入輸出產生的,是用於數據交換或轉換的統一的標准(特指這一類的數據)。C++和一些編程語言中定義的流(stream)類,就是對這類數據的定義。並通過成員函數對「流」進行操作。這樣,用戶和程序,程序和外設之間都是通過「流」進行交互。而程序員不需要知道「流」的底層到底是怎麼實現的。 就好像吃飯和排泄。數據流中定義了,先牙齒咀嚼,然後胃部消化,然後小腸吸收,然後大腸發酵,然後你懂的。你只需要CIN,還有COUT,就能控制吃喝拉撒。你管它是細嚼還是狼吞?你管它便秘還是拉肚子?吞吐量是電腦性能的事。你管它是先進小腸還是先進胃?底層是內核的事。你只需要擁有了CIN和COUT,你就擁有了一切。
從廣義上來說,流也是文件,不同於txt文本類的文件(流屬於數據,數據等同於文件)。你可以對流進行各種操作。緩沖區的定義,也是為了對流的操作。
綜上,我們知道了,流是數據,流是標准,流是文件。流的作用我們知道了,那麼「流」到底是個什麼玩意呢?非常同意 448634095 所說的。用著用著自己就知道是什麼玩意了。就好像剛開始學編程 鬧不明白函數 是個啥意思,和數學上的函數一點也不一樣。你現在知道整形是什麼了吧?你能不能給我舉個簡單的列子給我解釋下整形是什麼?
注意:流和 輸入輸出的緩沖區是兩個概念。

⑤ C語言中流是什麼意思

流是磁碟或其它外圍設備中存儲的數據的源點或終點。」。這是在《C程序設計語言》上的原話。

據我的理解,流主要是指一種邏輯上的概念,它提供或存儲數據。產生數據的叫輸入流,消耗數據的叫輸出流。至於怎麼產生,又怎麼消耗,這是一種物理上的實現,根據每種設備有所不同,但C語言中對它們一視同仁,以一個「流」字來概括它們的特徵。作為流的使用者來說,不需要關心太多的細節。流的實現保證了它具有它所聲明的特性。C語言中對流除了分為I/O流之外,還分為文本流與二進制流。文本流的特點是流由文本行組成,每一行有0個或多個字元並以』\n』字元結束,即它是有一定意義的,以某種字元集的字元組成的一個序列。一個文本流,讀入與寫出時可能會對其內容作更改,因為它是有一定意義的,系統可以識別並在適當時候解釋,比如在輸出文本流中碰到』\b』時,系統的操作是將輸入流中的前一個字元刪除,在終端上顯示就是在它前面輸出的這個字元被刪除了;二進制流則完成是由一些「生」的,未經處理的數據組成的,C語言將它們看成由0與1組成的序列來讀與寫,所以它們的特性是同一系統中把同一二進制流讀入與寫出,其內容沒有任何變化。

⑥ c語言中的輸入流是什麼意思

可以把流看作是一種數據的載體,通過它可以實現數據交換和傳輸。就像水流是一串水組成的 計算機中的數據流就是由一串數據組成的東西。

C++的輸入輸出流及文件操作
1. C++保留C的輸入輸出單個字元的函數
(1) putchar(c) —— 字元輸出
常式:
#include
using namespace std;
int main()
{
char a,b,c;
a='B'; b='O';c='Y';
putchar(a); putchar(b); putchar(c);putchar('/n');
putchar(66);putchar(79);putchar(89);putchar(10); //10是換行的ASCII碼
return 0;
}
(2) getchar() ——字元輸入函數
常式:
#include
using namespace std;
int main()
{
char c;
c=getchar();
putchar(c+32); //轉化為小寫字母,大小寫之間包括[ / ] ^ - 、6個字元,因此不加26加32。'A'=65
putchar('/n');
return 0;
}
也可用cout來輸出: cout<<(c=getchar()+32);
2. scanf()、printf()函數的輸入和輸出
scanf(格式控制,輸出表列);
printf(格式控制,輸出表列);
常式:
#include
using namespace std;
int main()
{
int a;
float b;
char c;
scanf("%d % c % f", &a,&c,&b);
printf("a=%d, b=%f, c=%c /n",a,b,c);
return 0;
}
3. 標准輸入輸出流cin、cout
包括頭文件#include
輸入輸出流的控制符要加入頭文件 #include
cout<<"dec:"<
cout.put(97); //顯示a字元--使用cout的成員函數put(c)
cin成員函數get()
(1) 不帶參數的
char c=cin.get(); //用cin的成員函數get()從鍵盤讀入一個字元到c中去
(2) 帶一個參數的
cin.get(ch); //從輸入的流中接受一個字元,並賦給字元變數ch
(3) 帶三個參數的
cin.get(字元數組,字元的個數n,終止字元)
常式:
#include
using namespace std;
int main()
{
char ch[20];
cout<<"in put a string:"<
cin.get(ch,10,'/n'); /*取得輸入流的前10-1=9個字元賦值給ch數組的前9個元素,並規定換行符為為輸入流的終止結束符*/
cout<
return 0;
}
如輸入:1 2 34567890 //按換行鍵終止流輸入
則輸出:1 2 34567 //只讀得前9個送入ch數組中
cin的成員函數getline() ——從輸入流中讀入一行字元
cin.getline(字元數組(或字元指針),字元的個數n,終止字元)
常式:
#include
using namespace std;
int main()
{
char ch[20];
cout<<"input a string:"<
cin>>ch;
cout<<"The string read with cin is:"<
cin.getline(ch,20,'/'); //讀取19個字元到ch數組或遇到'/'結束
cout<<"The second part is:"<
cin.getline(ch,20); //讀取19個字元到ch數組或遇到'/n'結束,遇到'/'仍作為字元讀入
cout<<"The third part is:"<
return 0;
}
istream類的其他的成員函數如:eof(),在輸入流中讀取數據,如果到達末尾(遇到文件結束符),則eof()返回真,否則為假.
常式:
#include
using namespace std;
int main()
{
char c;
while(!cin.eof()) //若未遇到文件結束符
if((c=cin,get())!=' ') //檢查讀入的字元是否為空格字元
cout.put(c);
return 0;
}
4. 磁碟文件的打開和關閉
打開
ofstream outfile;
if(outfile.open("f1.data",ios::app)==0) // 打開
cout<<"打開失敗!";
……………………
outfile.close(); //關閉
5. 文件寫入
#include
#include
#include //一定不能少了,否則報錯 error C2679
using namespace std;
int main()
{
string str;
ofstream out("d.txt",ios::out); //等價於ofstream out("d.txt")
if(!out) //若打開失敗,out返回0值
{
cerr<<"打開失敗!"<
exit(0);
}
str="床前明月光/n疑是地上霜/n舉頭望明月/n低頭思故鄉/n";
out< return 0;
}
6. 讀文件到控制台
#include
#include
#include
using namespace std;
int main()
{
ifstream infile("d://new//d.txt",ios::in); //定義輸入文件的流對象,以輸入方式打開磁碟文件d.txt,第二個參數可去
if(!infile)
{
cerr<<"打開失敗!"< exit(1);
}
for(string str;getline(infile,str);) //逐行打開並逐行顯示,因此在循環中實現
cout< infile.close();
return 0;
}
或把 for(string str;getline(in,str);)
cout<
兩句改為 string str;
while(getline(in,str))
cout<
7. 文件復制
#include
#include
#include
using namespace std;
int main()
{
ifstream in("d.txt");
if(!in)
{
cerr<<"打開源文件失敗!"< exit(1);
}
ofstream out("b.txt");
if(!out)
{
cerr<<"打開目的文件失敗!"< exit(1);
}
for(string str;getline(in,str);)
out< cout<<"文件復製成功!"<
in.close();
out.close();
return 0;
}
8. 自定義一個文件讀入的函數 void display( char *filename)
#include
#include
#include
using namespace std;
void display(char *filename)
{
ifstream infile(filename,ios::in);
if(!infile)
{
cerr<<"打開失敗!"< exit(1);
}
char ch;
while(infile.get(ch))
cout.put(ch);
cout< infile.close();
}
int main()
{
display("d.txt");
return 0;
}
9.關於文件讀寫的綜合應用
#include
#include
using namespace std;
//從鍵盤讀入字母並存入文件「d.txt」中
void save_to_file()
{
ofstream ofile("d.txt");
if(!ofile)
{
cerr<<"打開失敗d.txt!"< exit(1);
}
char c[80];
cin.getline(c,80); //從鍵盤逐個讀入一行字元
for(int i=0;c[i]!=0;i++) //對字元逐個處理,知道遇到'/n'結束
if(c[i]>=65 && c[i]<=90||c[i]>=97 && c[i]<=122)
{
ofile.put(c[i]); //將字母存入磁碟文件d.txt
cout< }
cout< ofile.close();
}
//將"d.txt"中的字母轉化為大寫字母並存入"out.txt"中
void get_from_file()
{
char ch;
ifstream infile("d.txt");
if(!infile)
{
cerr<<"打開失敗d.txt!"< exit(1);
}
ofstream outfile("out.txt");
if(!infile)
{
cerr<<"打開失敗out.txt!"< exit(1);
}
while(infile.get(ch)) //逐個讀入字元成功後執行下面的語句
{
if(ch>=97 &&ch<=122)
ch=ch-32;
outfile.put(ch);
cout< }
cout< infile.close();
outfile.close();
}
int main()
{
save_to_file();
get_from_file();
return 0;
}
=========================== C/C++的字元或字元數組的讀入函數總結=====================
1、cin
1、cin.get()
2、cin.getline()
3、getline()
4、gets()
5、getchar()
1、cin>>
用法1:最基本,也是最常用的用法,輸入一個數字:
#include
using namespace std;
main ()
{
int a,b;
cin>>a>>b;
cout<}
輸入:2[回車]3[回車]
輸出:5
用法2:接受一個字元串,遇「空格」、「TAB」、「回車」都結束
#include
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<}
輸入:jkljkljkl
輸出:jkljkljkl
輸入:jkljkl jkljkl //遇空格結束
輸出:jkljkl
2、cin.get()
用法1: cin.get(字元變數名)可以用來接收字元
#include
using namespace std;
main ()
{
char ch;
ch=cin.get(); //或者cin.get(ch);
cout<}
輸入:jljkljkl
輸出:j
用法2:cin.get(字元數組名,接收字元數目)用來接收一行字元串,可以接收空格
#include
using namespace std;
main ()
{
char a[20];
cin.get(a,20);
cout<}
輸入:jkl jkl jkl
輸出:jkl jkl jkl
輸入:abcdeabcdeabcdeabcdeabcde (輸入25個字元)
輸出:abcdeabcdeabcdeabcd (接收19個字元+1個'/0')
3、cin.getline() // 接受一個字元串,可以接收空格並輸出
getline 會將換行符替換為空字元
#include
using namespace std;
main ()
{
char m[20];
cin.getline(m,5);
cout<}
輸入:jkljkljkl
輸出:jklj
接受5個字元到m中,其中最後一個為'/0',所以只看到4個字元輸出;
如果把5改成20:
輸入:jkljkljkl
輸出:jkljkljkl
輸入:jklf fjlsjf fjsdklf
輸出:jklf fjlsjf fjsdklf
//延伸:
//cin.getline()實際上有三個參數,cin.getline(接受字元串的看哦那間m,接受個數5,結束字元)
//當第三個參數省略時,系統默認為'/0'
//如果將例子中cin.getline()改為cin.getline(m,5,'a');當輸入jlkjkljkl時輸出jklj,輸入jkaljkljkl時,輸出jk
當用在多維數組中的時候,也可以用cin.getline(m[i],20)之類的用法:
#include
#include
using namespace std;
main ()
{
char m[3][20];
for(int i=0;i<3;i++)
{
cout<<"/n請輸入第"<cin.getline(m[i],20);
}
cout<for(int j=0;j<3;j++)
cout<<"輸出m["<
}
請輸入第1個字元串:
kskr1
請輸入第2個字元串:
kskr2
請輸入第3個字元串:
kskr3
輸出m[0]的值:kskr1
輸出m[1]的值:kskr2
輸出m[2]的值:kskr3
4、getline() // 接受一個字元串,可以接收空格並輸出,需包含「#include」
#include
#include
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<}
輸入:jkljkljkl
輸出:jkljkljkl
輸入:jkl jfksldfj jklsjfl
輸出:jkl jfksldfj jklsjfl
和cin.getline()類似,但是cin.getline()屬於istream流,而getline()屬於string流,是不一樣的兩個函數
5、gets() // 接受一個字元串,可以接收空格並輸出,需包含「#include」
#include
#include
using namespace std;
main ()
{
char m[20];
gets(m); //不能寫成m=gets();
cout<}
輸入:jkljkljkl
輸出:jkljkljkl
輸入:jkl jkl jkl
輸出:jkl jkl jkl
類似cin.getline()裡面的一個例子,gets()同樣可以用在多維數組裡面:
#include
#include
using namespace std;
main ()
{
char m[3][20];
for(int i=0;i<3;i++)
{
cout<<"/n請輸入第"<gets(m[i]);
}
cout<for(int j=0;j<3;j++)
cout<<"輸出m["<
}
請輸入第1個字元串:
kskr1
請輸入第2個字元串:
kskr2
請輸入第3個字元串:
kskr3
輸出m[0]的值:kskr1
輸出m[1]的值:kskr2
輸出m[2]的值:kskr3
自我感覺gets()和cin.getline()的用法很類似,只不過cin.getline()多一個參數罷了;
這里順帶說明一下,對於本文中的這個kskr1,kskr2,kskr3 的例子,對於cin>>也可以適用,原因是這里輸入的沒有空格,如果輸入了空格,比如「ks kr jkl[回車]」那麼cin就會已經接收到3個字元串,「ks,kr,jkl」;再如「kskr 1[回車]kskr 2[回車]」,那麼則接收「kskr,1,kskr」;這不是我們所要的結果!而cin.getline()和gets()因為可以接收空格,所以不會產生這個錯誤;
6、getchar() //接受一個字元,需包含「#include」
#include
#include
using namespace std;
main ()
{
char ch;
ch=getchar(); //不能寫成getchar(ch);
cout<}
輸入:jkljkljkl
輸出:j
//getchar()是C語言的函數,C++也可以兼容,但是盡量不用或少用;
總結:
1.讀入一行
gets(char a[]); //接受一行,遇回車結束
gets(m[i]) //可用於多維數組中
cin.get(char a[],int 5,'/n') //將字元數組a的前5個字元讀入,遇到換行符結束;比如:a bc12ds,將會讀入4個字元 a bc,外加一個'/0';
// 一般第三個參數不寫,默認為'/0'
eg:
#include
#include
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<}
2.讀入一個字元
getchar() //接受一個字元,需包含「#include」
char ch =getchar();
cin.get(char c) 或者 cin.get()
char ch=cin.get(); 或者cin.get(ch)
getline()和cin.getline()類似,但是cin.getline()屬於istream流,而getline()屬於string流,是不一樣的兩個函數
cin.getline(char a[],int 5,'/n') //將字元數組a的前5個字元讀入,遇換行符結束;如:a bc12ds,將會讀入4個字元 a bc,外加一個'/0';
// 一般第三個參數不寫,默認為'/0'
cin.getline(m[i],20) //可用於多維數組中
getline() // 接受一個字元串,可以接收空格並輸出,需包含「#include"

⑦ C語言數據流圖簡介!

一個程序要運行,需要有輸入、輸出,如果出錯,還要能表現出自身的錯誤。這是就要從某個地方讀入數據、將數據輸出到某個地方,這就夠成了數據流。
因此,一個進程初期所擁有的這么三個數據流,就分別是標准輸出、標准輸入和標准錯誤,分別用stdout, stdin, stderr來表示。
對於這三個數據流來說,默認是表現在用戶終端上的,一般stdout, stderr被定位到屏幕。
比如在c中使用fprintf:fprintf(stdout,"hello world!n");屏幕上將列印出"hello world!"來。stdin被定位到鍵盤。當然他們也可以重新定位。

⑧ C語言中的緩沖區和數據流是一個概念嗎

不是一個概念。這兩個東西常在從硬碟讀取數據的過程中使用。數據流是指你要從硬碟中讀取並放到內存的那一段數據,就跟你打開水龍頭然後再關上流出的一段水一樣。而緩沖區是指你讀取的那段數據在內存中存放的區域。
至於為什麼要有緩沖區呢?因為硬碟讀寫很慢,你如果再一個位元組一個位元組得讀,效率會更低。 而內存的讀取速度很快,所以先把整段的文字一口氣讀下來放到緩沖區以後再一個一個轉碼(從位元組碼轉成字母數字元號漢字)可以大幅度提高運行效率。

⑨ C語言中數據流程圖和程序流程圖有什麼區別

那個叫「數據流圖」,是軟體工程的一個概念,通過圖的直觀反映,人用戶或編程者清楚看到作為軟體系統中的數據流的流向,概念較大
程序流程圖,僅僅是一個程序中的代碼編寫的思想的圖形化表述,具體到編碼測試階段了
雖然二者的有一些圖形工具是相同的,但本質上不是一類型的