當前位置:首頁 » 編程語言 » c語言的流

c語言的流

發布時間: 2023-10-13 10:44:15

c語言中的流

流么就是流派的意思,就像你打游戲(比如魔獸爭霸),就有滑鼠流,鍵盤流。滑鼠流:擅長用滑鼠操作的;鍵盤流:擅長用鍵盤操作的;
流最明顯的就是輸入流和輸出流,輸入流(如scanf,getchar等):用於輸入的;輸出流(printf,putchar等):用於輸出的。

㈡ C語言中stdin流的用法是什麼

C語言中stdin流的用法:

  1. stdin是C語言中標准輸入流,一般用於獲取鍵盤輸入到緩沖區里的東西。

  2. 訪問stdin,可用stdio.h中提供的以下幾個函數:

    (1)scanf、getchar來從stdin流中獲取指定的數據。scanf根據第一個參數指定的格式符將數據讀入後續參數指定的內存位置中;getchar從stdin流中讀取一個字元並返回。

    (2)可以使用一般的訪問輸入流的函數來訪問stdin,比如:fscanf、fgetc,使用方法和scanf、getchar類似,只是多了一個參數指定文件流。當然,scanf和getchar的具體實現就是通過調用fscanf和fgetc,這樣可以提高代碼利用率。

    (3)可以用fflush和rewind這兩個函數來刷新stdin,來清空緩沖區中已有的內容,不過這種方法不是標准方法,當stdin被重定向到文件時,這會導致指針重新指向文件開頭。

㈢ C語言文本流和二進制流

一、文本流和二進制流
在C中引入了流(stream)的概念。它將數據的輸入輸出看作是數據的流入和流出,這樣不管是磁碟文件或者是物理設備(列印機、顯示器、鍵盤等),都可看作一種流的源和目的,視他們為同一種東西,而不管其具體的物理結構,即對他們的操作,就是數據的流入和流出。這種把數據的輸入輸出操作對象,抽象化為一種流,而不管它的具體結構的方法很有利於編程,而涉及流的輸出操作函數可用於各種對象,與其具體的實體無關,即具有通用性。
在C中流可分為兩大類,即文本流(text stream)和二進制流(binary stream)。所謂文本流是指在流中流動的數據是以字元形式出現。在文本流中,'\n'被換成回車CR和換行LF的代碼0DH和0AH。而當輸出時,則0DH和0AH本換成'\n'。
二進制流是指流動的是二進制數字序列,若流中有字元,則用一個位元組的二進制ASCII碼表示,若是數字,則用一個位元組的二進制數表示。在流入流出時,對\n符號不進行變換。例如2001這個數,在文本流中用其ASCII碼表示為:
'2' '0' '0' '1'
| | | |
50 48 48 49
共佔4位元組。而在二進制流中則表示為:00000111 11010001 用十六進制就是07D1。只佔兩位元組。
由此看出,二進制流比文本流節省空間,且不用進行對\n的轉換,這樣可以大大加快流的速度,提高效率。因而,對於含有大量數字信息的數字流,可以採用二進制流的方式;對於含有大量字元信息的流,則採用文本流的方式。

二、流和文件
在C語言中流就是一種文件形式,它實際上就表示一個文件或設備(從廣義上講,設備也是一種文件)。把流當作文件總覺得不習慣,因而有人稱這種和流等同的文件為流式文件,流的輸入輸出也稱為文件的輸入輸出操作。當流到磁碟而成為文件時,意味著要啟動磁碟寫入操作,這樣流入一個字元(文本流)或流入一個位元組(二進制流)均要啟動磁碟操作,將大大降低傳輸效率(磁碟是慢速設備),且降低磁碟的使用壽命。為此,C語言在輸入輸出的使用使用了緩沖技術,即在內存為輸入的磁碟文件開辟了一個緩沖區(預設為512位元組),當流到該緩沖區裝滿後,再啟動磁碟一次,將緩沖區內容裝到磁碟文件中去。讀取文件也是類似。
在C語言中將此種文件輸入輸出操作稱為標准輸入輸出,或稱流式輸入輸出(因這種輸入輸出操作是ANSI C推薦的標准)。還有一種是不帶緩沖文件輸入輸出,稱為非標准文件輸入輸出或低級輸入輸出,它將由DOS直接管理。關於這兩種輸入輸出文件系統下節將會介紹。

三、文件FILE的數據結構

typedef struct
{
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer;
unsigned char *curp;
unsigned istemp;
short token;
}FILE;

這是Turbo C中使用的定義(在stdio.h文件中),不同的C編譯器,可能使用不同的定義,但基本含義變化不會太大。
flags: 是一個10位的標志字,其具體含義如下:

位 代表符號 含義
0 _F_READ 讀
1 _F_WRIT 寫
2 _F_BUF 由fclose釋放緩沖區
3 _F_LBUF 行緩沖
4 _F_ERR 出錯標志
5 _F_EOF EOF文件尾標志
6 _F_BIN 二進制方式
7 _F_IN 在進行輸入
8 _F_OUT 在進行輸出
9 _F_TERM 文件是一個終端

其他各欄位內容以及flags欄位內各位所的功能,請參照其他一些資料。這里不多說了,它目前並不是我們要求的內容。
應該注意,不要把文件指針和FILE結構指針混為一談,它們代表兩個不同的地址。文件指針指出了對文件當前讀寫的數據位置,而FILE結構指針是指出了打開文件所對應的FILE結構在內存中的地址,這個指針它實際本身也包含了文件指針的信息。流指針中的各欄位是供C語言內部使用的,用戶不應該存取它的任何欄位。用fwrite寫的文件為二進制流,所以當用文本打開文件時數字變成了亂碼.解決辦法是:1.改用fprintf 或者用itoa等格式化數字為字元串,然後用fwrite#include "stdio.h"
#include "iostream.h"
struct student
{
int no;
char name[10];
}a[4];
void save()
{ int i;
FILE *p;
if ((p=fopen("1.txt","w"))==NULL)
{cout<<"\n"<<"can not open file"; <br>}
for(i=1;i<4;i++)
{
fprintf(p, "%d%10s\t", a[i].no, a[i].name);
}
fclose(p);
}
void main()
{
printf("please input no name");
int i;
for (i=1;i<4;i++)
{scanf("%d%s",&a[i].no,a[i].name); <br>}
for (i=1;i<4;i++)
{cout<<a[i].no<<a[i].name; <br>}
save();
}函數說明:fprintf int fprintf(FILE *fp, char *format,…)
stdio.h
將格式化數據寫入流式文件中

fp 文件指針
format 格式化字元,同函數printf()中的格式控制字元 … 要顯示的數據項列表2.用另一種方法進行文件輸入編碼可消除這些問題。
主要是用C++,添加頭文件# include "fstream.h"。參考代碼如下:
#include "stdio.h"
#include "iostream.h"
# include "fstream.h"
struct student
{int no; <br>char name[10]; <br>}a[4];

void main()
{

ofstream ofile ( "file.txt", ios::out ) ;
printf("please input 4 students' names\n");
int i;
for (i=0;i<4;i++)
{scanf("%s",a[i].name); <br>a[i].no=i+1; <br>ofile <<a[i].no<<" "<<a[i].name<<endl; <br>}
}

㈣ 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語言中流動的不再是水,而是有順序的,有排列結構的數據。比如100001111100001(二進制)

C里的文件流,C里標准文件方式把文件當作流來看,也就是有一個內部緩沖buffer(在C庫內部建立,一般為512B),每次以標准方式打開文件時,讀入時先將數據讀到這個緩沖區里,寫的時候也是先寫入緩沖區里。
C里標准輸入就是stdin,標准輸出就是stdout,C對鍵盤輸入(比如scanf)和屏幕輸出(比如printf)的行緩沖機制就是建立在這些文件的流機制上的。
有時候比如scanf輸入整數時,最後一個回車就會留在流的buffer里。如果下次時你讀字元的話就會把它讀入。這就是為什麼有些C實現允許你用fflush(stdin)來清除輸入緩沖,不過C標准只定義了對普通文件和stdout等輸出流的fflush行為。因為按理說fflush刷新緩沖不應該丟棄輸入的。

㈥ c語言中什麼是流

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

㈦ C語言中流是什麼意思

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

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

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

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

熱點內容
c語言稀疏矩陣轉置矩陣 發布:2025-02-01 03:47:57 瀏覽:530
坦克世界掛機腳本有哪些 發布:2025-02-01 03:07:41 瀏覽:133
串口編程at 發布:2025-02-01 03:06:05 瀏覽:908
合資汽車配置有什麼 發布:2025-02-01 02:56:07 瀏覽:78
wifi共享精靈源碼 發布:2025-02-01 02:40:15 瀏覽:973
java軟體怎麼安裝 發布:2025-02-01 02:40:09 瀏覽:549
河北稅務局電子密碼是什麼 發布:2025-02-01 02:40:07 瀏覽:835
檢查伺服器設置是什麼意思 發布:2025-02-01 02:31:26 瀏覽:185
神偷四第四章密碼是多少 發布:2025-02-01 02:07:29 瀏覽:13
qq登錄在哪個文件夾 發布:2025-02-01 01:57:59 瀏覽:627