cin<<的結束符有enter space tab
cin.get()的結束符只有enter,但會把enter放入隊列等待
cin.getline()的結束符也只有enter,但不會把enter放入隊列
如果用cin>>…做過輸入,在使用cin.getline之前,需要處理一下。處理的方法很多,你可以在cin>>…的輸入語句後加一個語句cin.get();。
|
用getline()讀取輸入行
當程序使用cin輸入時,cin用空白符和行結束符
將各個值分開
。根據所需輸入的值,如需讀取一整行文本並且分開不同的域,則要使用getline成員函數
getline
(
char
*
line
,
int
size,
char
=
'"n')
|
第二個參數是本次讀取的最大字符個數,第三個參數是分隔字符,作爲讀取一行結束的標誌。
下面的函數從鍵盤讀取一行文本
#
include
<
iostream
>
using
namespace
std
;
int
main(
)
{
char
str[
128]
;
cin
.
getline
(
str,
sizeof
(
str)
)
;
cout
<
<
"you typed :"
<
<
str<
<
endl
;
}
|
#
include
<
iostream
>
using
namespace
std
;
int
main(
)
{
char
str[
128]
;
cout
<
<
"please input text and enter"
<
<
endl
;
cin
.
getline
(
str,
sizeof
(
str)
,
'X'
)
;
cout
<
<
"you typed first line:"
<
<
str<
<
endl
;
cin
.
getline
(
str,
sizeof
(
str)
)
;
cout
<
<
"sencond line :"
<
<
str<
<
endl
;
}
|
在鍵入X之前,可以按一次到多次回車鍵,而並不結束第一個cin.getline()的輸入 。 第一個cin.getline()的輸入操作將以鍵入X後的第一個回車結束。
cin.getline() 與 cin>>str 的一個不同是,前者輸入一行,行中可以包含空格,後者卻以空格或回車作爲字串結束,不包含空格。
用get()讀取一個字符
每次獲取一個字符:char istream::get();
//get.cpp
#
include
<
iostream
>
using
namespace
std
;
int
main(
)
{
char
letter;
while
(
!
cin
.
eof
(
)
)
{
letter=
cin
.
get(
)
;
letter=
toupper
(
letter)
;
if
(
letter=
=
'Y'
)
{
cout
<
<
" "nY have been met "n"
;
break
;
}
cout
<
<
letter;
}
}
|
使用流成員函數的輸入操作不只限於鍵盤,上例程序可從重定向輸入中讀取。
$ ./get < get.cpp
letter
=cin.get();與cin>>letter
都是從輸入流中取一個字符,但卻有區別,默認情況下,cin>>letter將跳過任何在文件中發現的任何空白字符(空白字符指空格,
tab,backspace,回車) .而cin.get不跳過空白字符。
用get(
)
輸入一系列字符
istream
&
istream
:
:
get(
char
*
,
int
n,
char
delim=
'"n'
)
;
istream
fin(
"abc.txt"
)
;
char buffer[80];
fin>>buffer; //不能保證輸入字符個數在80以內。
可以改寫爲
istream fin("abc.txt");
char buffer[80];
fin.get(buffer,80); //保證輸入字符個數在80以內
|
getline()與get()第二種形式相同,唯一的例外是getline()從輸入流中輸入一系列字符時包括分隔符,而get()不包括分隔符。
put成員函數,依次輸出字符。
#
include
<
iostream
>
using
namespace
std
;
int
main(
)
{
char
letter;
for
(
letter=
'A'
;
letter<
=
'Z'
;
letter+
+
)
cout
.
put(
letter)
;
}
|
cout<<letter;
與cout.put(letter)的區別是:前者顯示以數據類型表示的形式,後者以字符方式顯示。若letter是char型,兩者一樣。若
letter是int型,則cout<<letter顯示數字而不是字符了。
#
include
<
iostream
>
#
include
<
fstream
>
using
namespace
std
;
int
main(
)
{
ifstream
in(
"put.cpp"
)
;
if
(
in.
fail(
)
)
{
cerr
<
<
"Error opening the file"n"
;
}
while
(
!
in.
eof
(
)
)
{
cout
.
put(
in.
get(
)
)
;
}
}
//注意get()這種形勢它讀取了空白符(含回車符),不跳過任何的字符。與
get(char * ,int n ,delim='"n')這種行式不同,他不包括分隔符delim.
|
|
|