2017-04-08 96 views
1

好吧,所以我瀏覽並發現了以下在hackerrank上的實現bubble sort。現在cin無限期地向量輸入循環。爲什麼?

,這裏採用下面的while循環的輸入:

while (cin >> t) 

它執行的hackerrank網站,但不是在我的IDE(克利翁,你可以看到),即程序不斷接受無限期輸入。我還發現,在向矢量輸入時,網站上的許多帖子也使用或建議類似的代碼。我目前正在使用在stackoverflow帖子中建議的其他方法,有些人並沒有太多的工作。我的問題是

  • 爲什麼程序無限期接受輸入?
  • 是否有任何條件/像標誌和這樣的違反?
  • 這是否得到刪除在C++ 14或類似的東西?

回答

1

通常,當您運行一個可執行文件時,其標準輸入被綁定到一些交互式媒體(終端或控制檯)。除非您明確發送文件結尾(例如,在Linux上使用Ctrl + D),否則這種介質通常不會結束。所以循環永遠不會終止,因爲閱讀總是可以阻止並等待更多的輸入。

如果您將可執行文件的標準輸出重定向爲從文件讀取,則這是不同的。在一個典型的殼,這是你會達到什麼樣的使用<:當你讀正常

myprog < file.txt 

這種方式,程序的標準輸入將是文件的文件描述符,並從中讀取將發出EOF到文件結尾。

+0

謝謝angew !!這是有道理的。 –

0

在C語言結構我用

while(scanf("%d %d", &a, &b)==2) 
or 
while(scanf("%d %d", &a, &b)!=EOF) 

獲得連續輸入

我試圖int x=scanf("%d %d", &a, &b)看到什麼在
去,這讓我X = 2,這就是爲什麼循環連續運行(導致2 == 2)

爲C++輸入流會給你一個布爾值(如果我沒有錯)
你可以檢查bool x=cin>>var;看到的價值。 而對於正確的輸入,它將始終給出1.
因此while(cin>>something)其實意味着while(1) 這就是爲什麼循環連續輸入輸入。
它不是一個好的答案,但它是有道理的,我認爲。

0
while(std::cin >> somevar && 
     somevar != "\n") 
{ } 

如果您知道終止序列,我會推薦此解決方案。

+0

Naw。試過,沒有奏效。嗯,我認爲一旦我們獲得了所需數量的輸入,我們可以在編程末尾添加一個分隔字符,即像空字符'\ 0'結束。當然,那看起來不那麼幹淨。我希望它能夠工作,因爲代碼看起來超級乾淨;) –