[英]Behaviour of cin.get() and cin.put()
以下是C ++中的代碼,該代碼將字母作為輸入並將其作為輸出。 持續進行直到不按Ctrl+C
即^C
#include<iostream>
using namespace std;
int main(void)
{
char c;
do
{
c = cin.get();
cout.put(c);
}while((c = cin.get())!='\0');
return 0;
}
問題是以下輸出:
hello
hlo
hello
el
我知道為什么第一個輸出像它來的那樣來,但是第二個呢? 另外,當我只按一次enter
鍵時,為什么會有兩個新行。 我可以幫忙嗎?
第一次, cin.get()
阻塞了do-while循環代碼中的線程。 輸入后,按Enter鍵,發現出現兩個換行符。 這是因為do-while循環代碼中的cin.get()
已被阻止,並且在您按Enter鍵時, c
將變為'\\n'
。 接下來發生的是cout.put('\\n');
。
此時,在do-while條件下您的cin.get()
阻塞了您的線程,因此最終跳過了h
,前一個l
和o
。
查看循環條件-每個循環迭代兩次調用cin.get()
。 將缺少的字符與'\\0'
進行比較並丟棄。
如您所知, cin.get()
在循環中被調用兩次,而cin.put(c)
僅被調用一次。 由於您鍵入了兩次hello
,並且每次都跳過一個字符,因此輸出的字符序列為:(跳過的字符在括號中): h (e) l (l) o
(h) e (l) l (o)
對於此問題,應牢記兩個關鍵點。 這些是:-
return
鍵時,它也存儲在緩沖區中,並與存儲在其中的所有字符一起推入標准輸出中。 return
鍵) 說的字符串hello!
輸入並點擊return
。 然后,我們再次hello!
然后按return
鍵。 在這兩種情況下,字符總數(無論哪種情況)均為7
而不是6
。 在這種情況下,輸出為:
hello!
hlo
hello!
el!_
其中_
表示將要顯示的光標。 這是因為在do-while
循環中cin.get()
命令讀取了第一個字符串之后的return
鍵命中,因此將其打印出來。 之后,控件進入do-while
條件,並讀取第二個字符串的h
。 這就是h
未在第二個輸出中打印的原因。 之后,將顯示每個偶數字符。 這就是原因!
打印。 之后, do-while
條件會檢測到return
鍵,該條件會暫停_
位置的執行。
現在,如果您按一次return
鍵,您將獲得兩次return
,因為一次輸入了return
,而另一次則是輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.