2015-04-05 243 views
0

只是爲了好奇心。在解決問題的過程中,很多問題都會提到:「輸入將會被終止。」Ctrl + z「。我知道它的 「EOF(文件的結束)」 可是......Ctrl Z的工作原理

while(scanf("%d",&a)==1) 
{ cout<<"OK"<<endl;} 

while(scanf("%d",&a)!=EOF) 
{cout<<"OK"<<endl;} 

while(cin>>a) 
{cout<<"OK"<<endl;} 

以上3將按Ctrl +ž被終止。

while(scanf("%d",&a)) 
{cout<<"OK"<<endl;} 

它將按按Ctrl +ž OK。 和

while(1){cin>>a; 
cout<<"OK"<<endl;} 

它是一個無限循環。

我想知道如何使用Ctrl + z適用於程序終止。背後的原因是什麼?請詳細回答。

+0

哦,對,然後從不知道。 – JBL 2015-04-05 13:46:06

+1

@NafeeurRahman:你沒有提到你正在談論Windows專門引起了一些混淆 - 人們認爲你正在談論一個適當的操作系統,其中Ctrl Z做了一些不同的事情。我已經爲您的問題添加了Windows標記以避免更多混淆。 – 2015-04-05 13:50:03

回答

2

Ctrl + z不終止您的程序。它也不會暫停執行。這是一個0x1A字節,由iostreamstdio方法解釋爲EOF(文件結束)。在從控制檯讀取字符之後,沒有進一步讀取,並且正在讀取它的方法返回。在iostream的情況下,std::ios::eof()成爲現實。

你會在你的最後通知的情況下,如果你把它作爲:

while(cin >> a) { ... }

將退出其他人一樣。

+0

謝謝你的回答。我想知道爲什麼Ctrl + Z在第四種情況下無法正常工作?按下Ctrl + Z之後,它也會輸入。但爲什麼? – 2015-04-05 20:07:59

+0

@NafeeurRahman,在第四種情況下,當您輸入Ctrl + Z時,'scanf'將返回'EOF'(通常爲-1),所以循環重複。 – eryksun 2015-04-05 20:44:30

+0

在較低級別,Windows ['ReadFile'](https://msdn.microsoft.com/en-us/library/aa365467)也會涉及到。對於默認['ENABLE_PROCESSED_INPUT'](https://msdn.microsoft.com/en-us/library/ms683167)模式下的控制檯輸入句柄,如果它讀入的緩衝區以Ctrl + Z(0x1A)開頭, ReadFile'將'lpNumberOfBytesRead'設置爲0. AFAIK,這是沒有記錄的。 – eryksun 2015-04-05 20:50:39