真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語(yǔ)言檢測(cè)輸入流狀態(tài)函數(shù),只能用于檢測(cè)輸入流狀態(tài)的操作函數(shù)

C++中怎樣聲明輸入流成員函數(shù)和輸出流成員函數(shù)

在程序中一般用cout和插入運(yùn)算符“”實(shí)現(xiàn)輸出,cout流在內(nèi)存中有相應(yīng)的緩沖區(qū)。有時(shí)用戶還有特殊的輸出要求,例如只輸出一個(gè)字符。ostream類(lèi)除了提供上面介紹過(guò)的用于格式控制的成員函數(shù)外,還提供了專(zhuān)用于輸出單個(gè)字符的成員函數(shù)put。如:

目前創(chuàng)新互聯(lián)建站已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、臨夏網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

cout.put('a');

調(diào)用該函數(shù)的結(jié)果是在屏幕上顯示一個(gè)字符a。put函數(shù)的參數(shù)可以是字符或字符的ASCII代碼(也可以是一個(gè)整型表達(dá)式)。如

cout.put(65 + 32);

也顯示字符a,因?yàn)?7是字符a的ASCII代碼。

可以在一個(gè)語(yǔ)句中連續(xù)調(diào)用put函數(shù)。如:

cout.put(71).put(79).put(79). put(68).put('\n');

在屏幕上顯示GOOD。

[例13.4] 有一個(gè)字符串"BASIC",要求把它們按相反的順序輸出。

#include iostreamusing namespace std;int main( )

{ ? char *a="BASIC";//字符指針指向'B'

for(int i=4;i=0;i--)

cout.put(*(a+i)); ? ? ? ? ? ? ? ? ?//從最后一個(gè)字符開(kāi)始輸出

cout.put('\n'); ? return 0;

}

除了使用cout.put函數(shù)輸出一個(gè)字符外,還可以用putchar函數(shù)輸出一個(gè)字符。putchar函數(shù)是C語(yǔ)言中使用的,在stdio.h頭文件中定義。C++保留了這個(gè)函數(shù),在iostream頭文件中定義。

[例13.4] 也可以改用putchar函數(shù)實(shí)現(xiàn)。

#include iostream ?//也可以用#include stdio.h,同時(shí)不要下一行using namespace std;int main( )

{ ? char *a="BASIC"; ? for(int i=4;i=0;i--)

putchar(*(a+i));

putchar('\n');

}

成員函數(shù)put不僅可以用cout流對(duì)象來(lái)調(diào)用,而且也可以用ostream類(lèi)的其他流對(duì)象調(diào)用。

cin輸入流詳解

標(biāo)準(zhǔn)輸入流是從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))流向程序的數(shù)據(jù)。在頭文件iostream.h中定義了cin、cout、cerr、clog 4個(gè)流對(duì)象(詳情請(qǐng)查看:與C++輸入輸出有關(guān)的類(lèi)和對(duì)象),cin是輸入流,cout、cerr、clog是輸出流。

cin是istream類(lèi)的對(duì)象,它從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))獲取數(shù)據(jù),程序中的變量通過(guò)流提取符“”從流中提取數(shù)據(jù)。流提取符“”從流中提取數(shù)據(jù)時(shí)通常跳過(guò)輸入流中的空格、tab鍵、換行符等空白字符。

注意:只有在輸入完數(shù)據(jù)再按回車(chē)鍵后,該行數(shù)據(jù)才被送入鍵盤(pán)緩沖區(qū),形成輸入流,提取運(yùn)算符“”才能從中提取數(shù)據(jù)。需要注意保證從流中讀取數(shù)據(jù)能正常進(jìn)行。

例如:

int a,b;

cinab;

若從鍵盤(pán)上輸入

21 ?abc↙

變量a從輸入流中提取整數(shù)21,提取操作成功,此時(shí)cin流處于正常狀態(tài)。但在變量b準(zhǔn)備提取一個(gè)整數(shù)時(shí),遇到了字母a,顯然提取操作失敗了,此時(shí),cin流被置為出錯(cuò)狀態(tài)。只有在正常狀態(tài)時(shí),才能從輸入流中提取數(shù)據(jù)。

當(dāng)遇到無(wú)效字符或遇到文件結(jié)束符(不是換行符,是文件中的數(shù)據(jù)已讀完)時(shí),輸入流cin就處于出錯(cuò)狀態(tài),即無(wú)法正常提取數(shù)據(jù)。此時(shí)對(duì)cin流的所有提取操作將終止。在 IBM PC及其兼容機(jī)中,以Ctrl + Z表示文件結(jié)束符。在UNIX和Macintosh系統(tǒng)中,以 Ctrl + D表示文件結(jié)束符。當(dāng)輸入流cin處于出錯(cuò)狀態(tài)時(shí),如果測(cè)試cin的值,可以發(fā)現(xiàn)它的值為false(假),即cin為0值。如果輸入流在正常狀態(tài),cin的值為true(真),即cin為 一個(gè)非0值??梢酝ㄟ^(guò)測(cè)試cin的值,判斷流對(duì)象是否處于正常狀態(tài)和提取操作是否成功。如:

if(!cn) //流cin處于出銷(xiāo)狀態(tài),無(wú)法正常提取數(shù)據(jù)

cout"error";

[例13.5] 通過(guò)測(cè)試cin的真值,判斷流對(duì)象是否處于正常狀態(tài)。

#include iostreamusing namespace std;int main( )

{ ? float grade;

cout"enter grade:"; ? while(cingrade)//能從cin流讀取數(shù)據(jù) ? { ? ? ?if(grade=85) coutgrade"GOOD!"endl; ? ? ?if(grade60) coutgrade"fail!"endl;

cout"enter grade:";

}

cout"The end."endl; ? return 0;

}

流提取符“”不斷地從流中提取數(shù)據(jù)(每次提取一個(gè)浮點(diǎn)數(shù)),如果成功,就陚給 grade,此時(shí)cin為真,若不成功則cin為假。如果鍵入文件結(jié)束符,表示數(shù)據(jù)已完。

運(yùn)行情況如下:

enter grade: 67↙

enter grade: 89↙

89 GOOD!

enter grade: 56↙

56 fail!

enter grade: 100↙

100 GOOD!

enter grade: ^Z↙//鍵入文件結(jié)束符

The end.

在遇到文件結(jié)束符時(shí),程序結(jié)束。如果某次輸入的數(shù)據(jù)為

enter grade: 100/2↙

流提取符""提取100,賦給grade,進(jìn)行if語(yǔ)句的處理。然后再遇到"/",認(rèn)為是無(wú)效字符,cin返回0。循環(huán)結(jié)束,輸出"The end."。

在不同的C++系統(tǒng)下運(yùn)行此程序,在最后的處理上有些不同。以上是在GCC環(huán)境下運(yùn)行程序的結(jié)果,如果在VC++環(huán)境(筆者使用win7系統(tǒng))下運(yùn)行此程序,在鍵入Ctrl + Z 時(shí),需要敲擊兩次回車(chē),程序才輸出"The end."。

get()函數(shù)讀入一個(gè)字符

get()函數(shù)是cin輸入流對(duì)象的成員函數(shù),它有3種形式:無(wú)參數(shù)的,有一個(gè)參數(shù)的,有3個(gè)參數(shù)的。

1) 不帶參數(shù)的get函數(shù)

其調(diào)用形式為

cin.get()

用來(lái)從指定的輸入流中提取一個(gè)字符(包括空白字符),函數(shù)的返回值就是讀入的字符。 若遇到輸入流中的文件結(jié)束符,則函數(shù)值返回文件結(jié)束標(biāo)志EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考慮到不與字符的ASCII代碼混淆,但不同的C ++系統(tǒng)所用的EOF值有可能不同。

[例13.6] 用get函數(shù)讀入字符。

#include iostreamusing namespace std;int main( )

{ ? int c;

cout"enter a sentence:"endl; ? while((c=cin.get())!=EOF)

cout.put(c); ? return 0;

}

運(yùn)行情況如下:

enter a sentence:

I study C++ very hard.↙(輸入一行字符)

I study C++ very hard.????????????? (輸出該行字符)

^Z↙(程序結(jié)束)

C語(yǔ)言中的getchar函數(shù)與流成員函數(shù)cin.get( )的功能相同,C++保留了C的這種用法,可以用getchar(c)從鍵盤(pán)讀入一個(gè)字符賦給c。

2) 有一個(gè)參數(shù)的get函數(shù)

其調(diào)用形式為

cin.get(ch)

其作用是從輸入流中讀取一個(gè)字符,賦給字符變量ch。如果讀取成功則函數(shù)返回true(真),如失敗(遇文件結(jié)束符) 則函數(shù)返回false(假)。例13.6可以改寫(xiě)如下:

#include iostreamusing namespace std;int main( )

{ ? char c;

cout"enter a sentence:"endl; ? while(cin.get(c)) ?//讀取一個(gè)字符賦給字符變量c,如果讀取成功,cin.get(c)為真 ? {cout.put(c);}

cout"end"endl; ? return 0;

}

3) 有3個(gè)參數(shù)的get函數(shù)

其調(diào)用形式為

cin.get(字符數(shù)組, 字符個(gè)數(shù)n, 終止字符)

cin.get(字符指針, 字符個(gè)數(shù)n, 終止字符)

其作用是從輸入流中讀取n-1個(gè)字符,賦給指定的字符數(shù)組(或字符指針指向的數(shù)組),如果在讀取n-1個(gè)字符之前遇到指定的終止字符,則提前結(jié)束讀取。如果讀取成功則函數(shù)返回true(真),如失敗(遇文件結(jié)束符) 則函數(shù)返回false(假)。再將例13.6改寫(xiě)如下:

#include iostreamusing namespace std;int main( )

{ ? char ch[20];

cout"enter a sentence:"endl;

cin.get(ch,10,'\\n');//指定換行符為終止字符

coutchendl; ? return 0;

}

運(yùn)行情況如下:

enter a sentence:

I study C++ very hard.↙

I study

在輸入流中有22個(gè)字符,但由于在get函數(shù)中指定的n為10,讀取n -1個(gè)(即9個(gè))字符并賦給字符數(shù)組ch中前9個(gè)元素。有人可能要問(wèn):指定n-10,為什么只讀取9個(gè)字符呢?因?yàn)榇娣诺氖且粋€(gè)字符串,因此在9個(gè)字符之后要加入一個(gè)字符串結(jié)束標(biāo)志,實(shí)際上存放到數(shù)組中的是10個(gè)字符。請(qǐng)讀者思考:如果不加入字符串結(jié)束標(biāo)志,會(huì) 出現(xiàn)什么情況?結(jié)果是:在用“coutch”;輸出數(shù)組中的字符時(shí),不是輸出讀入的字符串,而是數(shù)組中的全部元素。大家可以親自測(cè)試一下ch[9](即數(shù)組中第10個(gè)元素)的值是什么。

如果輸入↙

abcde

即未讀完第9個(gè)字符就遇到終止字符、讀取操作終止,前5個(gè)字符已存放到數(shù)組ch[0]到ch[4]中,ch[5]中存放'\0'。

如果在get函數(shù)中指定的n為20,而輸入22個(gè)字符,則將輸入流中前19個(gè)字符賦給字符數(shù)組ch中前19個(gè)元素,再加入一個(gè)'\0'。

get函數(shù)中第3個(gè)參數(shù)可以省寫(xiě),此時(shí)默認(rèn)為'\n'。下面兩行等價(jià):

cin.get(ch,10,'\\n');

cin.get(ch,10);

終止字符也可以用其他字符。如

cin.get(ch,10,'x');

在遇到字符'x'時(shí)停止讀取操作。

c語(yǔ)言中的輸入流是什么意思?

可以把流看作是一種數(shù)據(jù)的載體,通過(guò)它可以實(shí)現(xiàn)數(shù)據(jù)交換和傳輸。就像水流是一串水組成的 計(jì)算機(jī)中的數(shù)據(jù)流就是由一串?dāng)?shù)據(jù)組成的東西。

C++的輸入輸出流及文件操作

1. C++保留C的輸入輸出單個(gè)字符的函數(shù)

(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() ——字符輸入函數(shù)

例程:

#include

using namespace std;

int main()

{

char c;

c=getchar();

putchar(c+32); //轉(zhuǎn)化為小寫(xiě)字母,大小寫(xiě)之間包括[ / ] ^ - 、6個(gè)字符,因此不加26加32。'A'=65

putchar('/n');

return 0;

}

也可用cout來(lái)輸出: cout(c=getchar()+32);

2. scanf()、printf()函數(shù)的輸入和輸出

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. 標(biāo)準(zhǔn)輸入輸出流cin、cout

包括頭文件#include

輸入輸出流的控制符要加入頭文件 #include

cout"dec:"

cout.put(97); //顯示a字符--使用cout的成員函數(shù)put(c)

cin成員函數(shù)get()

(1) 不帶參數(shù)的

char c=cin.get(); //用cin的成員函數(shù)get()從鍵盤(pán)讀入一個(gè)字符到c中去

(2) 帶一個(gè)參數(shù)的

cin.get(ch); //從輸入的流中接受一個(gè)字符,并賦給字符變量ch

(3) 帶三個(gè)參數(shù)的

cin.get(字符數(shù)組,字符的個(gè)數(shù)n,終止字符)

例程:

#include

using namespace std;

int main()

{

char ch[20];

cout"in put a string:"

cin.get(ch,10,'/n'); /*取得輸入流的前10-1=9個(gè)字符賦值給ch數(shù)組的前9個(gè)元素,并規(guī)定換行符為為輸入流的終止結(jié)束符*/

cout

return 0;

}

如輸入:1 2 34567890 //按換行鍵終止流輸入

則輸出:1 2 34567 //只讀得前9個(gè)送入ch數(shù)組中

cin的成員函數(shù)getline() ——從輸入流中讀入一行字符

cin.getline(字符數(shù)組(或字符指針),字符的個(gè)數(shù)n,終止字符)

例程:

#include

using namespace std;

int main()

{

char ch[20];

cout"input a string:"

cinch;

cout"The string read with cin is:"

cin.getline(ch,20,'/'); //讀取19個(gè)字符到ch數(shù)組或遇到'/'結(jié)束

cout"The second part is:"

cin.getline(ch,20); //讀取19個(gè)字符到ch數(shù)組或遇到'/n'結(jié)束,遇到'/'仍作為字符讀入

cout"The third part is:"

return 0;

}

istream類(lèi)的其他的成員函數(shù)如:eof(),在輸入流中讀取數(shù)據(jù),如果到達(dá)末尾(遇到文件結(jié)束符),則eof()返回真,否則為假.

例程:

#include

using namespace std;

int main()

{

char c;

while(!cin.eof()) //若未遇到文件結(jié)束符

if((c=cin,get())!=' ') //檢查讀入的字符是否為空格字符

cout.put(c);

return 0;

}

4. 磁盤(pán)文件的打開(kāi)和關(guān)閉

打開(kāi)

ofstream outfile;

if(outfile.open("f1.data",ios::app)==0) // 打開(kāi)

cout"打開(kāi)失敗!";

……………………

outfile.close(); //關(guān)閉

5. 文件寫(xiě)入

#include

#include

#include //一定不能少了,否則報(bào)錯(cuò) error C2679

using namespace std;

int main()

{

string str;

ofstream out("d.txt",ios::out); //等價(jià)于ofstream out("d.txt")

if(!out) //若打開(kāi)失敗,out返回0值

{

cerr"打開(kāi)失?。?

exit(0);

}

str="床前明月光/n疑是地上霜/n舉頭望明月/n低頭思故鄉(xiāng)/n";

out return 0;

}

6. 讀文件到控制臺(tái)

#include

#include

#include

using namespace std;

int main()

{

ifstream infile("d://new//d.txt",ios::in); //定義輸入文件的流對(duì)象,以輸入方式打開(kāi)磁盤(pán)文件d.txt,第二個(gè)參數(shù)可去

if(!infile)

{

cerr"打開(kāi)失?。? exit(1);

}

for(string str;getline(infile,str);) //逐行打開(kāi)并逐行顯示,因此在循環(huán)中實(shí)現(xiàn)

cout infile.close();

return 0;

}

或把 for(string str;getline(in,str);)

cout

兩句改為 string str;

while(getline(in,str))

cout

7. 文件復(fù)制

#include

#include

#include

using namespace std;

int main()

{

ifstream in("d.txt");

if(!in)

{

cerr"打開(kāi)源文件失敗!" exit(1);

}

ofstream out("b.txt");

if(!out)

{

cerr"打開(kāi)目的文件失敗!" exit(1);

}

for(string str;getline(in,str);)

out cout"文件復(fù)制成功!"

in.close();

out.close();

return 0;

}

8. 自定義一個(gè)文件讀入的函數(shù) void display( char *filename)

#include

#include

#include

using namespace std;

void display(char *filename)

{

ifstream infile(filename,ios::in);

if(!infile)

{

cerr"打開(kāi)失??!" exit(1);

}

char ch;

while(infile.get(ch))

cout.put(ch);

cout infile.close();

}

int main()

{

display("d.txt");

return 0;

}

9.關(guān)于文件讀寫(xiě)的綜合應(yīng)用

#include

#include

using namespace std;

//從鍵盤(pán)讀入字母并存入文件“d.txt”中

void save_to_file()

{

ofstream ofile("d.txt");

if(!ofile)

{

cerr"打開(kāi)失敗d.txt!" exit(1);

}

char c[80];

cin.getline(c,80); //從鍵盤(pán)逐個(gè)讀入一行字符

for(int i=0;c[i]!=0;i++) //對(duì)字符逐個(gè)處理,知道遇到'/n'結(jié)束

if(c[i]=65 c[i]=90||c[i]=97 c[i]=122)

{

ofile.put(c[i]); //將字母存入磁盤(pán)文件d.txt

cout }

cout ofile.close();

}

//將"d.txt"中的字母轉(zhuǎn)化為大寫(xiě)字母并存入"out.txt"中

void get_from_file()

{

char ch;

ifstream infile("d.txt");

if(!infile)

{

cerr"打開(kāi)失敗d.txt!" exit(1);

}

ofstream outfile("out.txt");

if(!infile)

{

cerr"打開(kāi)失敗out.txt!" exit(1);

}

while(infile.get(ch)) //逐個(gè)讀入字符成功后執(zhí)行下面的語(yǔ)句

{

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++的字符或字符數(shù)組的讀入函數(shù)總結(jié)=====================

1、cin

1、cin.get()

2、cin.getline()

3、getline()

4、gets()

5、getchar()

1、cin

用法1:最基本,也是最常用的用法,輸入一個(gè)數(shù)字:

#include

using namespace std;

main ()

{

int a,b;

cinab;

cout}

輸入:2[回車(chē)]3[回車(chē)]

輸出:5

用法2:接受一個(gè)字符串,遇“空格”、“TAB”、“回車(chē)”都結(jié)束

#include

using namespace std;

main ()

{

char a[20];

cina;

cout}

輸入:jkljkljkl

輸出:jkljkljkl

輸入:jkljkl jkljkl //遇空格結(jié)束

輸出:jkljkl

2、cin.get()

用法1: cin.get(字符變量名)可以用來(lái)接收字符

#include

using namespace std;

main ()

{

char ch;

ch=cin.get(); //或者cin.get(ch);

cout}

輸入:jljkljkl

輸出:j

用法2:cin.get(字符數(shù)組名,接收字符數(shù)目)用來(lái)接收一行字符串,可以接收空格

#include

using namespace std;

main ()

{

char a[20];

cin.get(a,20);

cout}

輸入:jkl jkl jkl

輸出:jkl jkl jkl

輸入:abcdeabcdeabcdeabcdeabcde (輸入25個(gè)字符)

輸出:abcdeabcdeabcdeabcd (接收19個(gè)字符+1個(gè)'/0')

3、cin.getline() // 接受一個(gè)字符串,可以接收空格并輸出

getline 會(huì)將換行符替換為空字符

#include

using namespace std;

main ()

{

char m[20];

cin.getline(m,5);

cout}

輸入:jkljkljkl

輸出:jklj

接受5個(gè)字符到m中,其中最后一個(gè)為'/0',所以只看到4個(gè)字符輸出;

如果把5改成20:

輸入:jkljkljkl

輸出:jkljkljkl

輸入:jklf fjlsjf fjsdklf

輸出:jklf fjlsjf fjsdklf

//延伸:

//cin.getline()實(shí)際上有三個(gè)參數(shù),cin.getline(接受字符串的看哦那間m,接受個(gè)數(shù)5,結(jié)束字符)

//當(dāng)?shù)谌齻€(gè)參數(shù)省略時(shí),系統(tǒng)默認(rèn)為'/0'

//如果將例子中cin.getline()改為cin.getline(m,5,'a');當(dāng)輸入jlkjkljkl時(shí)輸出jklj,輸入jkaljkljkl時(shí),輸出jk

當(dāng)用在多維數(shù)組中的時(shí)候,也可以用cin.getline(m[i],20)之類(lèi)的用法:

#include

#include

using namespace std;

main ()

{

char m[3][20];

for(int i=0;i3;i++)

{

cout"/n請(qǐng)輸入第"cin.getline(m[i],20);

}

coutfor(int j=0;j3;j++)

cout"輸出m["

}

請(qǐng)輸入第1個(gè)字符串:

kskr1

請(qǐng)輸入第2個(gè)字符串:

kskr2

請(qǐng)輸入第3個(gè)字符串:

kskr3

輸出m[0]的值:kskr1

輸出m[1]的值:kskr2

輸出m[2]的值:kskr3

4、getline() // 接受一個(gè)字符串,可以接收空格并輸出,需包含“#include”

#include

#include

using namespace std;

main ()

{

string str;

getline(cin,str);

cout}

輸入:jkljkljkl

輸出:jkljkljkl

輸入:jkl jfksldfj jklsjfl

輸出:jkl jfksldfj jklsjfl

和cin.getline()類(lèi)似,但是cin.getline()屬于istream流,而getline()屬于string流,是不一樣的兩個(gè)函數(shù)

5、gets() // 接受一個(gè)字符串,可以接收空格并輸出,需包含“#include”

#include

#include

using namespace std;

main ()

{

char m[20];

gets(m); //不能寫(xiě)成m=gets();

cout}

輸入:jkljkljkl

輸出:jkljkljkl

輸入:jkl jkl jkl

輸出:jkl jkl jkl

類(lèi)似cin.getline()里面的一個(gè)例子,gets()同樣可以用在多維數(shù)組里面:

#include

#include

using namespace std;

main ()

{

char m[3][20];

for(int i=0;i3;i++)

{

cout"/n請(qǐng)輸入第"gets(m[i]);

}

coutfor(int j=0;j3;j++)

cout"輸出m["

}

請(qǐng)輸入第1個(gè)字符串:

kskr1

請(qǐng)輸入第2個(gè)字符串:

kskr2

請(qǐng)輸入第3個(gè)字符串:

kskr3

輸出m[0]的值:kskr1

輸出m[1]的值:kskr2

輸出m[2]的值:kskr3

自我感覺(jué)gets()和cin.getline()的用法很類(lèi)似,只不過(guò)cin.getline()多一個(gè)參數(shù)罷了;

這里順帶說(shuō)明一下,對(duì)于本文中的這個(gè)kskr1,kskr2,kskr3 的例子,對(duì)于cin也可以適用,原因是這里輸入的沒(méi)有空格,如果輸入了空格,比如“ks kr jkl[回車(chē)]”那么cin就會(huì)已經(jīng)接收到3個(gè)字符串,“ks,kr,jkl”;再如“kskr 1[回車(chē)]kskr 2[回車(chē)]”,那么則接收“kskr,1,kskr”;這不是我們所要的結(jié)果!而cin.getline()和gets()因?yàn)榭梢越邮湛崭瘢圆粫?huì)產(chǎn)生這個(gè)錯(cuò)誤;

6、getchar() //接受一個(gè)字符,需包含“#include”

#include

#include

using namespace std;

main ()

{

char ch;

ch=getchar(); //不能寫(xiě)成getchar(ch);

cout}

輸入:jkljkljkl

輸出:j

//getchar()是C語(yǔ)言的函數(shù),C++也可以兼容,但是盡量不用或少用;

總結(jié):

1.讀入一行

gets(char a[]); //接受一行,遇回車(chē)結(jié)束

gets(m[i]) //可用于多維數(shù)組中

cin.get(char a[],int 5,'/n') //將字符數(shù)組a的前5個(gè)字符讀入,遇到換行符結(jié)束;比如:a bc12ds,將會(huì)讀入4個(gè)字符 a bc,外加一個(gè)'/0';

// 一般第三個(gè)參數(shù)不寫(xiě),默認(rèn)為'/0'

eg:

#include

#include

using namespace std;

main ()

{

string str;

getline(cin,str);

cout}

2.讀入一個(gè)字符

getchar() //接受一個(gè)字符,需包含“#include”

char ch =getchar();

cin.get(char c) 或者 cin.get()

char ch=cin.get(); 或者cin.get(ch)

getline()和cin.getline()類(lèi)似,但是cin.getline()屬于istream流,而getline()屬于string流,是不一樣的兩個(gè)函數(shù)

cin.getline(char a[],int 5,'/n') //將字符數(shù)組a的前5個(gè)字符讀入,遇換行符結(jié)束;如:a bc12ds,將會(huì)讀入4個(gè)字符 a bc,外加一個(gè)'/0';

// 一般第三個(gè)參數(shù)不寫(xiě),默認(rèn)為'/0'

cin.getline(m[i],20) //可用于多維數(shù)組中

getline() // 接受一個(gè)字符串,可以接收空格并輸出,需包含“#include"

C語(yǔ)言中stdin流的用法是什么?

C語(yǔ)言中stdin流的用法:

stdin是C語(yǔ)言中標(biāo)準(zhǔn)輸入流,一般用于獲取鍵盤(pán)輸入到緩沖區(qū)里的東西。

訪問(wèn)stdin,可用stdio.h中提供的以下幾個(gè)函數(shù):

(1)scanf、getchar來(lái)從stdin流中獲取指定的數(shù)據(jù)。scanf根據(jù)第一個(gè)參數(shù)指定的格式符將數(shù)據(jù)讀入后續(xù)參數(shù)指定的內(nèi)存位置中;getchar從stdin流中讀取一個(gè)字符并返回。

(2)可以使用一般的訪問(wèn)輸入流的函數(shù)來(lái)訪問(wèn)stdin,比如:fscanf、fgetc,使用方法和scanf、getchar類(lèi)似,只是多了一個(gè)參數(shù)指定文件流。當(dāng)然,scanf和getchar的具體實(shí)現(xiàn)就是通過(guò)調(diào)用fscanf和fgetc,這樣可以提高代碼利用率。

(3)可以用fflush和rewind這兩個(gè)函數(shù)來(lái)刷新stdin,來(lái)清空緩沖區(qū)中已有的內(nèi)容,不過(guò)這種方法不是標(biāo)準(zhǔn)方法,當(dāng)stdin被重定向到文件時(shí),這會(huì)導(dǎo)致指針重新指向文件開(kāi)頭。

C語(yǔ)言從stdin讀取一行字符串的方法如下:

gets

gets函數(shù)的頭文件是stdio.h,原型如下:

char *gets(char *s);

gets從stdin中讀入一行內(nèi)容到s指定的buffer中,當(dāng)遇到換行符或EOF時(shí)讀取結(jié)束。讀取成功時(shí),返回s地址;失敗時(shí)返回null。需要注意的是,gets會(huì)將行末尾的'\n'字符或EOF替換成'\0',這樣,gets讀取的內(nèi)容中不包括'\n'字符。如果要獲取讀取字符串的長(zhǎng)度,可以調(diào)用strlen函數(shù)獲得。

fgets

fgets函數(shù)的頭文件是stdio.h,原型如下:

char *fgets(char *s, int size, FILE*stream);

fgets從stream中讀取最多size-1大小的內(nèi)容到s指定的buffer中,當(dāng)遇到換行符或EOF時(shí)讀取結(jié)束。讀取成功時(shí),返回s地址;失敗時(shí)返回null。需要注意的是,fgets會(huì)在所讀取的內(nèi)容后面添加'\0',這樣,fgets讀取的內(nèi)容中會(huì)包括行末尾的'\n'字符。如果要獲取讀取字符串的長(zhǎng)度,可以調(diào)用strlen函數(shù)獲得。

getline

getline函數(shù)的頭文件是stdio.h,原型如下:

ssize_t getline(char **lineptr,size_t *n, FILE *stream);

getline從stream中讀取一行內(nèi)容到*lineptr所指定的buffer中,當(dāng)遇到換行符或EOF時(shí)讀取結(jié)束。*n是*lineptr所指定的buffer的大小,如果*n小于讀入的內(nèi)容長(zhǎng)度,getline會(huì)自動(dòng)擴(kuò)展buffer長(zhǎng)度,并更新*lineptr和*n的值。讀取成功時(shí),返回讀入的字符個(gè)數(shù);失敗時(shí)返回-1。需要注意的是,gelines讀取的內(nèi)容中會(huì)包括行末尾的'\n'字符。

c語(yǔ)言有哪些輸入輸出函數(shù)

C語(yǔ)言輸入輸出函數(shù)有很多,bai標(biāo)準(zhǔn)I/O函數(shù)du中包含了如下幾個(gè)常用的函數(shù):

scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.

int scanf(const char *format, arg_list)

scanf主要從標(biāo)準(zhǔn)zhi輸入流中獲取dao參數(shù)值,format為指定的參數(shù)格式及參數(shù)類(lèi)型,如scanf("%s,%d",str,icount);

它要求在標(biāo)準(zhǔn)輸入流中輸入類(lèi)似"son of bitch,1000"這樣的字符串,同時(shí)程序會(huì)將"son of bitch"給str,1000給icount.

scanf函數(shù)的返回值為int值,即成功賦值的個(gè)數(shù),在上例中如果函數(shù)調(diào)用成功,則會(huì)返回2,所以我們?cè)趯?xiě)程序時(shí),可以通過(guò)

語(yǔ)句if(scanf("%s,%d",str,icount) != 2){...}來(lái)判斷用戶輸入是否正確.

int printf(const char *format, arg_list)

printf主要是將格式化字符串輸出到標(biāo)準(zhǔn)輸出流中,在stdio.h頭文件中定義了標(biāo)準(zhǔn)的輸入和輸出,分別是stdin,stdout.

arg_list可以是變量名,也可以是表達(dá)式,但最終都會(huì)以值的形式填充進(jìn)format中.

int getc(FILE *fp)

getc主要是從文件中讀出一個(gè)字符.常用的判斷文件是否讀取結(jié)束的語(yǔ)句為:(ch = getc(fp)) != EOF.EOF為文件結(jié)束標(biāo)志,

定義在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定義在stdlib.h中一樣,文件也可以被理解為一種流,所以當(dāng)fp為stdin

時(shí),getc(stdin)就等同于getchar()了.

int putc(int ch,FILE *fp)

putc主要是把字符ch寫(xiě)到文件fp中去.如果fp為stdout,則putc就等同于putchar()了.

int getchar(void)

getchar主要是從標(biāo)準(zhǔn)輸入流讀取一個(gè)字符.默認(rèn)的標(biāo)準(zhǔn)輸入流即stdio.h中定義的stdin.但是從輸入流中讀取字符時(shí)又

涉及到緩沖的問(wèn)題,所以并不是在屏幕中敲上一個(gè)字符程序就會(huì)運(yùn)行,一般是通過(guò)在屏幕上敲上回車(chē)鍵,然后將回車(chē)前的字符

串放在緩沖區(qū)中,getchar就是在緩沖區(qū)中一個(gè)一個(gè)的讀字符.當(dāng)然也可以在while循環(huán)中指定終止字符,如下面的語(yǔ)句:

while ((c = getchar()) != '#')這是以#來(lái)結(jié)束的.

int putchar(int ch)

putchar(ch)主要是把字符ch寫(xiě)到標(biāo)準(zhǔn)流stdout中去.

char * gets(char *str)

gets主要是從標(biāo)準(zhǔn)輸入流讀取字符串并回顯,讀到換行符時(shí)退出,并會(huì)將換行符省去.

int puts(char *str)

puts主要是把字符串str寫(xiě)到標(biāo)準(zhǔn)流stdout中去,并會(huì)在輸出到最后時(shí)添加一個(gè)換行符.

char *fgets(char *str, int num, FILE *fp)

str是存放讀入的字符數(shù)組指針,num是最大允許的讀入字符數(shù),fp是文件指針.fgets的功能是讀一行字符,該行的字符數(shù)

不大于num-1.因?yàn)閒gets函數(shù)會(huì)在末尾加上一個(gè)空字符以構(gòu)成一個(gè)字符串.另外fgets在讀取到換行符后不會(huì)將其省略.

int fputs(char *str, file *fp)

fputs將str寫(xiě)入fp.fputs與puts的不同之處是fputs在打印時(shí)并不添加換行符.

int fgetc(FILE *fp)

fgetc從fp的當(dāng)前位置讀取一個(gè)字符.

int fputc(int ch, file *fp)

fputc是將ch寫(xiě)入fp當(dāng)前指定位置.

int fscanf(FILE *fp, char *format,...)

fscanf按照指定格式從文件中出讀出數(shù)據(jù),并賦值到參數(shù)列表中.

int fprintf(FILE *fp, char *format,...)

fprintf將格式化數(shù)據(jù)寫(xiě)入流式文件中.


新聞標(biāo)題:c語(yǔ)言檢測(cè)輸入流狀態(tài)函數(shù),只能用于檢測(cè)輸入流狀態(tài)的操作函數(shù)
當(dāng)前網(wǎng)址:http://weahome.cn/article/hdcspp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部