當前位置:首頁 » 電腦資訊 » 文件操作中數據輸入又被稱為什麼

文件操作中數據輸入又被稱為什麼

發布時間: 2023-02-16 18:51:44

⑴ 在 C 語言中,從計算機內存中將數據寫入文件中,稱為 A刪除,B輸入,C輸出,D修改

這道題用排除法解決,可以得到正確答案!首先A刪除,肯定不是,原因是你可以想像一下,復制粘貼的過程,並不是將內存中的數據刪除,粘貼後內存中的數據依然存在。D修改,提議是從計算機內存中將數據寫入文件中,不涉及修改內存的過程,就剩,B輸入,C輸出。首先輸入是將數據寫入內存,輸出是將數據寫入到其它地方,所以答案選C輸出。

⑵ C++中讀寫文件問題

由於程序中經常有大量對文件的輸入輸出操作,它經常構成了程序的主要部分,因而C語言提供了很多輸入輸出的函數,它們分別用於兩種類型文件輸入輸出系統:即由ANSI標準定義的緩沖文件(也稱標准文件(流)輸入輸出(I/O)系統);另一類是ANSI標准中沒有定義的非緩沖文件(也稱非標准文件(流)輸入輸出(I/O)系統)。
我們已經熟悉了通過鍵盤和顯示器進行輸入輸出的一些函數,如scanf(),printf()等等,這些通過控制台(鍵盤、顯示器等)進行I/O的操作,可以看作標准文件輸入輸出系統的一些特例,實際上在標准輸入輸出系統中的一些函數,有關文件的參數(文件結構指針或稱流指針),只要用標准設備的流指針代替,這些標准輸入輸出函數即成為控制台I/O函數。在任何程序執行時,C系統都定義了5個標准設備文件可供使用。自動打開的5個標准設備文件的文件結構指針(在標准I/O系統中)和文件代號將有一個規定值:

設備 標准文件I/O系統中的流指針名 非標准文件……

鍵盤(標准輸入) stdin 0
顯示器(標准輸出) stdout 1
顯示器(標准錯誤) stderr 2
串列口(標准輔助) stdoux 3
列印機(標准列印) stdprn 4

這樣,不論在標准文件系統還是非標准文件系統中,文件結構只要用上述的流指針或文件代號代替,則這些函數也均適用於控制台設備。

一、文本流和二進制流
在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語言內部使用的,用戶不應該存取它的任何欄位。

⑶ 輸入語句(如cin)在計算機內部是怎樣運行的

、 C++流的概念

在C++語言中,數據的輸入和輸出(簡寫為I/O)包括對標准輸入設備鍵盤和標准輸

出設備顯示器、對在外存磁碟上的文件和對內存中指定的字元串存儲空間(當然可

用該空間存儲任何信息)進行輸入輸出這三個方面。對標准輸入設備和標准輸出設

備的輸入輸出簡稱為標准I/O,對在外存磁碟上文件的輸入輸出簡稱為文件I/O,對

內存中指定的字元串存儲空間的輸入輸出簡稱為串I/O。
C++語言系統為實現數據的輸入和輸出定義了一個龐大的類庫,它包括的類主要有ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrs

tream,strstream等,其中ios為根基類,其餘都是它的直接或間接派生類。

ios為根基類,它直接派生四個類:輸入流類istream、輸出流類ostream、文件流

基類fstreambase和字元串流基類strstreambase,輸入文件流類同時繼承了輸入流

類和文件流基類(當然對於根基類是間接繼承),輸出文件流類ofstream同時繼承了輸出流類和文件流基類,輸入字元串流類istrstream同時繼承了輸入流類和字元串流基類,輸出字元串流類ostrstream同時繼承了輸出流類和字元串流基類,輸入輸出流類iostream同時繼承了輸入流類和輸出流類,輸入輸出文件流類fstream同時繼承了輸入輸出流類和文件流基類,輸入輸出字元串流類strstream同時繼承了輸入輸出流類和字元串流基類。
「流」就是「流動」,是物質從一處向另一處流動的過程。C++流是指信息從外部輸入設備(如鍵盤和磁碟)向計算機內部(即內存)輸入和從內存向外部輸出設備(如顯示器和磁碟)輸出的過程,這種輸入輸出過程被形象地比喻為「流」。為了實現信息的內外流動,C++系統定義了I/O類庫,其中的每一個類都稱作相應的流或流類,用以完成某一方面的功能。根據一個流類定義的對象也時常被稱為流。如根據文件流類fstream定義的一個對象fio,可稱作為fio流或fio文件流,用它可以同磁碟上一個文件相聯系,實現對該文件的輸入和輸出,fio就等同於與之相聯系的文件。
C++系統中的I/O類庫,其所有類被包含在iostream.h,fstream.h和strstrea.h這三個系統頭文件中,各頭文件包含的類如下:
iostream.h包含有:ios, iostream, istream, ostream, iostream_withassign,
istream_withassign, ostream_withassign等。
fstream.h包含有:fstream, ifstream, ofstream和fstreambase,以及iostream.h
中的所有類。
Strstrea.h包含有:strstream, istrstream, ostrstream和strstreambase,以及
iostream.h中的所有類。
在一個程序或一個編譯單元(即一個程序文件)中當需要進行標准I/O操作時,則必須包含頭文件iostream.h,當需要進行文件I/O操作時,則必須包含頭文件fstream.h,同樣,當需要進行串I/O操作時,則必須包含頭文件strstrea.h。在一個程序或編譯單元中包含一個頭文件的命令格式為「#include<頭文件名>」,當然若頭文件是用戶建立的,則頭文件名的兩側不是使用尖括弧,而是使用雙引號。當系統編譯一個C++文件對#include命令進行處理時,是把該命令中指定的文件中的全部內容嵌入到該命令的位置,然後再編譯整個C++文件生成相應的目標代碼文件。
C++不僅定義有現成的I/O類庫供用戶使用,而且還為用戶進行標准I/O操作定義了四個類對象,它們分別是cin,cout,cerr和clog,其中cin為istream_withassign流類的對象,代表標准輸入設備鍵盤,也稱為cin流或標准輸入流,後三個為ostream_withassign流類的對象,cout代表標准輸出設備顯示器,也稱為cout流或標准輸出流,cerr和clog含義相同,均代表錯誤信息輸出設備顯示器。因此當進行鍵盤輸入時使用cin流,當進行顯示器輸出時使用cout流,當進行錯誤信息輸出時使用cerr或clog。
在istream輸入流類中定義有對右移操作符>>重載的一組公用成員函數,函數的具體聲明格式為:
istream& operator>>(簡單類型標識符&);
簡單類型標識符可以為char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, float, double, long double, char*, signed char*, unsigned char*之中的任何一種,對於每一種類型都對應著一個右移操作符重載函數。由於右移操作符重載用於給變數輸入數據的操作,所以又稱為提取操作符,即從流中提取出數據賦給變數。
當系統執行cin>>x操作時,將根據實參x的類型調用相應的提取操作符重載函數,把x引用傳送給對應的形參,接著從鍵盤的輸入中讀入一個值並賦給x(因形參是x的別名)後,返回cin流,以便繼續使用提取操作符為下一個變數輸入數據。
當從鍵盤上輸入數據時,只有當輸入完數據並按下回車鍵後,系統才把該行數據存入到鍵盤緩沖區,供cin流順序讀取給變數。還有,從鍵盤上輸入的每個數據之間必須用空格或回車符分開,因為cin為一個變數讀入數據時是以空格或回車符作為其結束標志的。
當cin>>x操作中的x為字元指針類型時,則要求從鍵盤的輸入中讀取一個字元串,並把它賦值給x所指向的存儲空間中,若x沒有事先指向一個允許寫入信息的存儲空間,則無法完成輸入操作。另外從鍵盤上輸入的字元串,其兩邊不能帶有雙引號定界符,若帶有隻作為雙引號字元看待。對於輸入的字元也是如此,不能帶有單引號定界符。
在ostream輸出流類中定義有對左移操作符<<重載的一組公用成員函數,函數的具體聲明格式為:
ostream& operator<<(簡單類型標識符);
簡單類型標識符除了與在istream流類中聲明右移操作符重載函數給出的所有簡單類型標識符相同以外,還增加一個void* 類型,用於輸出任何指針(但不能是字元指針,因為它將被作為字元串處理,即輸出所指向存儲空間中保存的一個字元串)的值。由於左移操作符重載用於向流中輸出表達式的值,所以又稱為插入操作符。如當輸出流是cout時,則就把表達式的值插入到顯示器上,即輸出到顯示器顯示出來。
當系統執行cout<<x操作時,首先根據x值的類型調用相應的插入操作符重載函數,把x的值按值傳送給對應的形參,接著執行函數體,把x的值(亦即形參的值)輸出到顯示器屏幕上,從當前屏幕游標位置起顯示出來,然後返回cout流,以便繼續使用插入操作符輸出下一個表達式的值。當使用插入操作符向一個流輸出一個值後,再輸出下一個值時將被緊接著放在上一個值的後面,所以為了讓流中前後兩個值分開,可以在輸出一個值之後接著輸出一個空格,或一個換行符,或其他所需要的字元或字元串。

二、 輸入輸出格式控制

1.ios類中的枚舉常量
在根基類ios中定義有三個用戶需要使用的枚舉類型,由於它們是在公用成員部分定義的,所以其中的每個枚舉類型常量在加上ios::前綴後都可以為本類成員函數和所有外部函數訪問。在三個枚舉類型中有一個無名枚舉類型,其中定義的每個枚舉常量都是用於設置控制輸入輸出格式的標志使用的。該枚舉類型定義如下:
enum {skipws, left, right, internal, dec, oct, hex, showbase,
showpoint, uppercase, showpos, scientific, fixed, unitbuf, stdio
};
各枚舉常量的含義如下:
skipws
利用它設置對應標志後,從流中輸入數據時跳過當前位置及後面的所有連續的空白字元,從第一個非空白字元起讀數,否則不跳過空白字元。空格、製表符』\t』、回車符』\r』和換行符』\n』統稱為空白符。預設為設置。
left, right, internal
left在指定的域寬內按左對齊輸出,right按右對齊輸出,而internal使數值的符號按左對齊、數值本身按右對齊輸出。域寬內剩餘的字元位置用填充符填充。預設為right設置。在任一時刻只有一種有效。
dec, oct, hex
設置dec對應標志後,使以後的數值按十進制輸出,設置oct後按八進制輸出,而設置hex後則按十六進制輸出。預設為dec設置。
showbase
設置對應標志後使數值輸出的前面加上「基指示符」,八進制數的基指示符為數字0,十六進制數的基指示符為0x,十進制數沒有基指示符。預設為不設置,即在數值輸出的前面不加基指示符。
showpoint
強制輸出的浮點數中帶有小數點和小數尾部的無效數字0。預設為不設置。
uppercase
使輸出的十六進制數和浮點數中使用的字母為大寫。預設為不設置。即輸出的十六進制數和浮點數中使用的字母為小寫。
showpos
使輸出的正數前帶有正號「+」。預設為不設置。即輸出的正數前不帶任何符號。
scientific, fixed
進行scientific設置後使浮點數按科學表示法輸出,進行fixed設置後使浮點數按定點表示法輸出。只能任設其一。預設時由系統根據輸出的數值選用合適的表示輸出。
unitbuf, stdio
這兩個常量很少使用,所以不予介紹。
在ios中定義的第二個枚舉類型為:
enum open_mode {in, out, ate, app, trunc, nocreate, noreplace, binany};
其中的每個枚舉常量規定一種文件打開的方式,在定義文件流對象和打開文件時使用。
在ios中定義的第三個枚舉類型為:
enum seek_dir {beg, cur, end};
其中的每個枚舉常量用於對文件指針的定位操作上。

2. ios類中的成員函數
ios類提供成員函數對流的狀態進行檢測和進行輸入輸出格式控制等操作,每個成員函數的聲明格式和簡要說明如下:
int bad(); //操作出錯時返回非0值。
int eof(); //讀取到流中最後的文件結束符時返回非0值。
int fail(); //操作失敗時返回非0值。
void clear(); //清除bad,eof和fail所對應的標志狀態,使之恢復為正常狀態
//值0,使good標志狀態恢復為1。
char fill(); //返回當前使用的填充字元。
char fill(char c); //重新設置流中用於輸出數據的填充字元為c的值,返回此
//前的填充字元。系統預設置填充字元為空格。
long flags(); //返回當前用於I/O控制的格式狀態字。
long flags(long f); //重新設置格式狀態字為f的值,返回此前的格式狀態字。
int good(); //操作正常時返回非0值,當操作出錯、失敗和讀到文件結束符時
//均為不正常,則返回0。
int precision(); //返回浮點數輸出精度,即輸出的有效數字的位數。
int precision(int n); //設置浮點數的輸出精度為n,返回此前的輸出精度。
//系統預設置的輸出精度為6,即輸出的浮點數最多
//具有6位為有效數字。
int rdstate(); //操作正常時返回0,否則返回非0值,它與good()正好相反。
long setf(long f); //根據參數f設置相應的格式化標志,返回此前的設置。
//該參數f所對應的實參為無名枚舉類型中的枚舉常量(
//又稱格式化常量),可以同時使用一個或多個常量,每兩個
//常量之間要用按位或操作符連接。如當需要左對齊輸出,
//並使數值中的字母大寫時,則調用該函數的實參為ios::
//left | ios::uppercase。
long unsetf(long f); //根據參數f清除相應的格式化標志,返回此前的設置。
//如要清除此前的左對齊輸出設置,恢復預設的右對齊輸出
//設置,則調用該函數的實參為ios::left。
int width(); //返回當前的輸出域寬。若返回數值0則表明沒有為剛才輸出的
//數值設置輸出域寬,輸出域寬是指輸出的值在流中所佔有的位元組數。
int width(int w); //設置下一個數據值的輸出域寬為w,返回為輸出上一個數
//據值所規定的域寬,若無規定則返回0。注意:此設置不
//是一直有效,而只是對下一個輸出數據有效。
因為所有I/O流類都是ios的派生類,所以它們的對象都可以調用ios類中的成員函數和使用ios類中的格式化常量進行輸入輸出格式控制。下面以標准輸出流對象cout為例說明輸出的格式化控制。
程序1:
#include<iostream.h>
void main()
{
int x=30, y=300, z=1024;
cout<<x<<' '<<y<<' '<<z<<endl; //按十進制輸出
cout.setf(ios::oct); //設置為八進制輸出
cout<<x<<' '<<y<<' '<<z<<endl; //按八進制輸出
cout.unsetf(ios::oct);
//取消八進制輸出設置,恢復按十進制輸出
cout.setf(ios::hex); //設置為十六進制輸出
cout<<x<<' '<<y<<' '<<z<<endl; //按十六進制輸出
cout.setf(ios::showbase | ios::uppercase);
//設置基指示符輸出和數值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl;
cout.unsetf(ios::showbase | ios::uppercase);
//取消基指示符輸出和數值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl;
cout.unsetf(ios::hex);
//取消十六進制輸出設置,恢復按十進制輸出
cout<<x<<' '<<y<<' '<<z<<endl;
}
此程序的運行結果如下:
30 300 1024
36 454 2000
1e 12c 400
0X1E 0X12C 0X400
1e 12c 400
30 300 1024

程序2:
#include<iostream.h>
void main()
{
int x=468;
double y=-3.425648;
cout<<"x=";
cout.width(10); //設置輸出下一個數據的域寬為10
cout<<x; //按預設的右對齊輸出,剩餘位置填充空格字元
cout<<"y=";
cout.width(10); //設置輸出下一個數據的域寬為10
cout<<y<<endl;
cout.setf(ios::left); //設置按左對齊輸出
cout<<"x=";
cout.width(10);
cout<<x;
cout<<"y=";
cout.width(10);
cout<<y<<endl;
cout.fill('*'); //設置填充字元為'*'
cout.precision(3); //設置浮點數輸出精度為3
cout.setf(ios::showpos); //設置正數的正號輸出
cout<<"x=";
cout.width(10);
cout<<x;
cout<<"y=";
cout.width(10);
cout<<y<<endl;
}
此程序運行結果如下:
x= 468y= -3.42565
x=468 y=-3.42565
x=+468******y=-3.43*****

程序3:
#include<iostream.h>
void main()
{
float x=25, y=-4.762;
cout<<x<<' '<<y<<endl;
cout.setf(ios::showpoint); //強制顯示小數點和無效0
cout<<x<<' '<<y<<endl;
cout.unsetf(ios::showpoint); //恢復預設輸出
cout.setf(ios::scientific); //設置按科學表示法輸出
cout<<x<<' '<<y<<endl;
cout.setf(ios::fixed); //設置按定點表示法輸出
cout<<x<<' '<<y<<endl;
}
程序運行結果如下:
25 -4.762
25.0000 -4.76200
2.500000e+001 -4.762000e+000
25 -4.762

3. 格式控制操作符
數據輸入輸出的格式控制還有更簡便的形式,就是使用系統頭文件iomanip.h中提供的操縱符。使用這些操縱符不需要調用成員函數,只要把它們作為插入操作符<<(個別作為提取操作符>>)的輸出對象即可。這些操縱符及功能如下:
dec //轉換為按十進制輸出整數,它也是系統預置的進制。
oct //轉換為按八進制輸出整數。
hex //轉換為按十六進制輸出整數。
ws //從輸入流中讀取空白字元。
endl //輸出換行符』\n』並刷新流。刷新流是指把流緩沖區的內容立即寫入到對
//應的物理設備上。
ends //輸出一個空字元』\0』。
flush //只刷新一個輸出流。
setiosflags(long f) //設置f所對應的格式化標志,功能與setf(long f)
//成員函數相同,當然輸出該操縱符後返回的是一個
//輸出流。如採用標准輸出流cout輸出它時,則返回
//cout。對於輸出每個操縱符後也都是如此,即返回
//輸出它的流,以便向流中繼續插入下一個數據。
resetiosflags(long f) //清除f所對應的格式化標志,功能與unsetf(long f)
//成員函數相同。當然輸出後返回一個流。
setfill(int c) //設置填充字元為ASCII碼為c的字元。
setprecision(int n) //設置浮點數的輸出精度為n。
setw(int w) //設置下一個數據的輸出域寬為w。
在上面的操縱符中,dec, oce, hex, endl, ends, flush和ws除了在iomanip.h中有定義外,在iostream.h中也有定義。所以當程序或編譯單元中只需要使用這些不帶參數的操縱符時,可以只包含iostream.h文件,而不需要包含iomanip.h文件。
下面以標准輸出流對象cout為例,說明使用操作符進行的輸出格式化控制。
程序4:
#include<iostream.h>
//因iomanip.h中包含有iostream.h,所以該命令可省略
#include<iomanip.h>
void main()
{
int x=30, y=300, z=1024;
cout<<x<<' '<<y<<' '<<z<<endl; //按十進制輸出
cout<<oct<<x<<' '<<y<<' '<<z<<endl; //按八進制輸出
cout<<hex<<x<<' '<<y<<' '<<z<<endl; //按十六進制輸出
cout<<setiosflags(ios::showbase | ios::uppercase);
//設置基指示符和數值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六進制輸出
cout<<resetiosflags(ios::showbase | ios::uppercase);
//取消基指示符和數值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六進制輸出
cout<<dec<<x<<' '<<y<<' '<<z<<endl; //按十進制輸出
}
此程序的功能和運行結果都與程序1完全相同。

程序5:
#include<iostream.h>
#include<iomanip.h>
void main()
{
int x=468;
double y=-3.425648;
cout<<"x="<<setw(10)<<x;
cout<<"y="<<setw(10)<<y<<endl;
cout<<setiosflags(ios::left); //設置按左對齊輸出
cout<<"x="<<setw(10)<<x;
cout<<"y="<<setw(10)<<y<<endl;
cout<<setfill('*'); //設置填充字元為'*'
cout<<setprecision(3); //設置浮點數輸出精度為3
cout<<setiosflags(ios::showpos); //設置正數的正號輸出
cout<<"x="<<setw(10)<<x;
cout<<"y="<<setw(10)<<y<<endl;
cout<<resetiosflags(ios::left | ios::showpos);
cout<<setfill(' ');
}
此程序的功能和運行結果完全與程序2相同。

程序6:
#include<iomanip.h>
void main()
{
float x=25, y=-4.762;
cout<<x<<' '<<y<<endl;
cout<<setiosflags(ios::showpoint);
cout<<x<<' '<<y<<endl;
cout<<resetiosflags(ios::showpoint);
cout<<setiosflags(ios::scientific);
cout<<x<<' '<<y<<endl;
cout<<setiosflags(ios::fixed);
cout<<x<<' '<<y<<endl;
}
此程序的功能和運行結果也完全與程序3相同。

三、文件操作

1. 文件的概念
以前進行的輸入輸出操作都是在鍵盤和顯示器上進行的,通過鍵盤向程序輸入待處理的數據,通過顯示器輸出程序運行過程中需要告訴用戶的信息。鍵盤是C++系統中的標准輸入設備,用cin流表示,顯示器是C++系統中的標准輸出設備,用cout流表示。
數據的輸入和輸出除了可以在鍵盤和顯示器上進行之外,還可以在磁碟上進行。磁碟是外部存儲器,它能夠永久保存信息,並能夠被重新讀寫和攜帶使用。所以若用戶需要把信息保存起來,以便下次使用,則必須把它存儲到外存磁碟上。
在磁碟上保存的信息是按文件的形式組織的,每個文件都對應一個文件名,並且屬於某個物理盤或邏輯盤的目錄層次結構中一個確定的目錄之下。一個文件名由文件主名和擴展名兩部分組成,它們之間用圓點(即小數點)分開,擴展名可以省略,當省略時也要省略掉前面的圓點。文件主名是由用戶命名的一個有效的C++標識符,為了同其他軟體系統兼容,一般讓文件主名為不超過8個有效字元的標識符,同時為了便於記憶和使用,最好使文件主名的含義與所存的文件內容相一致。文件擴展名也是由用戶命名的、1至3個字元組成的、有效的C++標識符,通常用它來區分文件的類型。如在C++系統中,用擴展名h表示頭文件,用擴展名cpp表示程序文件,用obj表示程序文件被編譯後生成的目標文件,用exe表示連接整個程序中所有目標文件後生成的可執行文件。對於用戶建立的用於保存數據的文件,通常用dat表示擴展名,若它是由字元構成的文本文件則也用txt作為擴展名,若它是由位元組構成的、能夠進行隨機存取的內部格式文件則可用ran表示擴展名。
在C++程序中使用的保存數據的文件按存儲格式分為兩種類型,一種為字元格式文件,簡稱字元文件,另一種為內部格式文件,簡稱位元組文件。字元文件又稱ASCII碼文件或文本文件,位元組文件又稱二進制文件。在字元文件中,每個位元組單元的內容為字元的ASCII碼,被讀出後能夠直接送到顯示器或列印機上顯示或列印出對應的字元,供人們直接閱讀。在位元組文件中,文件內容是數據的內部表示,是從內存中直接復制過來的。當然對於字元信息,數據的內部表示就是ASCII碼表示,所以在字元文件和在位元組文件中保存的字元信息沒有差別,但對於數值信息,數據的內部表示和ASCII碼表示截然不同,所以在字元文件和在位元組文件中保存的數值信息也截然不同。如對於一個短整型數1069,它的內部表示佔有兩個位元組,對應的十六進制編碼為04 2D,其中04為高位元組值,2D為低位元組值;若用ASCII碼表示則為四個位元組,每個位元組依次為1069中每個字元的ASCII碼,對應的十六進制編碼為31 30 36 39。當從內存向字元文件輸出數值數據時需要自動轉換成它的ASCII碼表示,相反,當從字元文件向內存輸入數值數據時也需要自動將它轉換為內部表示,而對於位元組文件的輸入輸出則不需要轉換,僅是內外存信息的直接拷貝,顯然比字元文件的輸入輸出要快得多。所以當建立的文件主要是為了進行數據處理時,則適宜建立成位元組文件,若主要是為了輸出到顯示器或列印機供人們閱讀,或者是為了供其他軟體使用時,則適宜建立成字元文件。另外,當向字元文件輸出一個換行符』\n』時,則將被看作為輸出了回車』\r』和換行』\n』兩個字元;相反,當從字元文件中讀取回車和換行兩個連續字元時,也被看作為一個換行符讀取。
C++程序文件,利用其他各種語言編寫的程序文件,用戶建立的各種文本文件,各種軟體系統中的幫助文件等,因都是ASCII碼文件,所以都可以在C++中作為字元文件使用。
C

⑷ 什麼是輸入

輸入是一種調用輸入函數從外部文件中輸入數據賦給程序中的變數的計算機術語。
在C語言文件數據的輸入輸出中,當調用輸入函數從外部文件中輸入數據賦給程序中的變數時,這種操作成為「輸入」或「讀」。程序員們為了便於記憶和理解,通常將「輸入」和「讀」共讀為:讀入。
1、以上每個函數都以「f」開頭,其代表文件(file)之意,這正與正常數據的輸入輸出(scanf和printf)函數區分開來;str代表字元串(string)之意,ch則是代表字元(characters);fp代表文件指針(file pointer),而pf代表指向文件的文件指針,即「文件指針指向」(Pointing to file pointer),通常也叫做文件指針;
2、文件字元的輸入輸出函數也可寫為:getc和putc,它們與fgetc和fputc函數是等價的;
3、要注意正常「字元」的輸出(ch=getchar())輸入(putchar(ch))與「文件字元」的輸入輸出的函數調用上的區別。

⑸ C++中輸入輸出流所提及的一個名字重定向是什麼意思

1、先看流的概念:
c++的流是一種數據的載體,通過它可以實現數據交換和傳輸。 就像水流是一串水組成的,c++的數據流就是由一串數據組成的東西。

2、輸入輸出流:
在C++程序中,數據可以從程序流向屏幕或磁碟文件,稱為輸出流;也可以從鍵盤或磁碟文件流入到程序中,稱為輸入流。

3、在C++中,數據的輸入和輸出操作包括以下幾種情況:
(1)對標准輸入設備——鍵盤或標准輸出設備——顯示器進行輸入/輸出操作,簡稱為標准I/O流。
(2)、對外存(如磁碟)上的文件進行輸入/輸出操作,簡稱為文件I/O。
(3)對內存中指定的字元串存儲空間進行輸入/輸出操作,簡稱為串I/O。

4、在C++語言中,有四個已預先定義好的流對象,以便用戶直接使用,分別為:
(1)cin:用於處理標准輸入。
(2)cout:用於處理標准輸出。
(3)cerr:用於處理標准出錯信息,並提供不帶緩沖區的輸出。
(4)clog:也用於處理標准出錯信息,但提供帶有緩沖區的輸出。

熱點內容
除夕晚上為什麼不能喝酒 發布:2024-05-08 23:34:56 瀏覽:404
為什麼有錢人買東西時比較挑剔 發布:2024-05-08 23:15:32 瀏覽:356
為什麼小孩吃東西 發布:2024-05-08 23:15:32 瀏覽:193
淘寶商家為什麼會有花唄分期 發布:2024-05-08 23:08:54 瀏覽:599
蕎頭為什麼會使眼睛糢蝴 發布:2024-05-08 23:07:54 瀏覽:714
孩子為什麼會干嘔 發布:2024-05-08 22:51:25 瀏覽:524
我手機玩游戲時充電為什麼一直充 發布:2024-05-08 22:46:01 瀏覽:723
為什麼到晚上身體就痛 發布:2024-05-08 22:45:26 瀏覽:819
淘寶店鋪為什麼沒人買了 發布:2024-05-08 22:40:32 瀏覽:413
一個男孩子為什麼會戒酒 發布:2024-05-08 22:25:52 瀏覽:231