>n)" type="hidden"/>

while(scanf("%d",&n)!=EOF)與while(cin>>n)


我們知道scanf函數是C語言里面的,其返回值是,被輸入函數成功賦值的變量個數。針對於int  counts = scanf("%d",&n);來說如果賦值成功那么其返回值為1,即counts的值也是1。例如下面這個例子:

int c,b;
    int counts = scanf("%d %d", &c, &b);
    cout << counts;

while(條件語句);如條件語句為真,那么循環可以一直進行下去,如果為假則循環結束。就while(scanf("%d",&n)!=EOF)而言,由於EOF(end of file)是文件尾尾標符,它的值為-1,那么scanf("%d",&n)的返回值為1的話,該條件語句為真,循環將會進行下去;如果條件不成立,則跳過該循環,直接執行后面的語句。

對於while(cin>>n)來說,cin是C++的輸入流對象,">>"是重載的運算符,cin>>的返回值是cin對象。如istream & operator >> (istream &is, char a[]);下面可以看一個例子:

int _tmain(int argc, _TCHAR* argv[])
{
    int len = 1;
    char a[3];
    while (cin >> a || cin >> len)
    {
        cout << a << endl;
        cout << len <<endl;
    }
    return 0;
}

輸入 qq 和 0時,結果如下:

這個結果為什么是這樣,它是如何得到的呢?其實是這樣的:當我們輸入qq和0時,其中間是用空格隔開的,這樣cin>>qq之后返回cin對象再對0進行讀取,后面的cin>>len並沒有執行。所以while循環將會執行兩次,一次是a[] = "qq",另一次是a[] = "0";這樣才會出現以上的結果。

如果將while (cin >> a || cin >> len)改成while (cin >> a >> len),執行結果如下:

相信這個結果大家就好理解了。

下面對cin再做一下介紹,當我們從鍵盤輸入一串字符

輸入(cin)緩沖是行緩沖。當從鍵盤上輸入一串字符並按回車后,這些字符會首先被送到輸入緩沖區中存儲。每當按下回車鍵后,cin 就會檢測輸入緩沖區中是否有了可讀的數據,這種情況下cin對鍵盤上是否有作為流結束標志CTRL+Z或者CTRL+D,其檢查的方式有兩種:阻塞式以及非阻塞式。

阻塞式檢查方式指的是只有在回車鍵按下之后才對此前是否有 Ctrl+Z 組合鍵按下進行檢查,非阻塞式樣指的是按下 Ctrl+D 之后立即響應的方式。如果在按 Ctrl+D 之前已經從鍵盤輸入了字符,則 Ctrl+D的作用就相當於回車,即把這些字符送到輸入緩沖區供讀取使用,此時Ctrl+D不再起流結束符的作用。如果按 Ctrl+D 之前沒有任何鍵盤輸入,則 Ctrl+D 就是流結束的信號。
阻塞式的方式有一個特點:只有按下回車之后才有可能檢測在此之前是否有Ctrl+Z按下。

 1 int _tmain(int argc, _TCHAR* argv[])
 2 {
 3     char a[3];
 4 
 5     while (cin >> a)
 6     {
 7         cout << a << endl;
 8     }
 9     return 0;
10 }

輸入數據為Ctrl+D和Ctrl+Z,結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM