我們知道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,結果如下: