天天看點

001C++之cin>>[i]>>[++i]或cin>>[i]>>[i++]的誤用開門見山:(編譯器中)cin從右往左錄入

001C++之cin>>[i]>>[++i]或cin>>[i]>>[i++]的誤用

  • 開門見山:(編譯器中)cin從右往左錄入
    • 注意

開門見山:(編譯器中)cin從右往左錄入

下面我們用一個例子來解釋其機理:

這是一個簡單的

cin

指派

x=1,y=2

的問題.

#include "stdafx.h"
#include <iostream>
using namespace std;

int main(){
int x,y;
cin>>x>>y;
/*在鍵盤用以下格式輸入兩個數(中間空格),然後回車。
1 2
*/
cout<<x<<y<<endl;

return 0;
}
           

輸出結果:

001C++之cin&gt;&gt;[i]&gt;&gt;[++i]或cin&gt;&gt;[i]&gt;&gt;[i++]的誤用開門見山:(編譯器中)cin從右往左錄入

由上似乎得出

先将1賦給x,再将2賦給y(先入先出)

的結論——這個結論是錯誤.

然而在編譯器中卻是相反的

先将2賦給y,再将1賦給x(先入後出)

,我們将在下面用數組的例子加以說明。

  • 1.如

    cin >> n[i]>>n[i++]

    ——錯誤的使用
#include "stdafx.h"
#include <iostream>
using namespace std;

int main(){
 n[10], i = 0;
	cin >> n[i]>>n[i++];
/*在鍵盤用以下格式輸入兩個數(中間空格),然後回車。
1 2
*/
cout << n[i - 1] << " " << n[i]<<endl;
return 0;
}
           

輸出結果:

001C++之cin&gt;&gt;[i]&gt;&gt;[++i]或cin&gt;&gt;[i]&gt;&gt;[i++]的誤用開門見山:(編譯器中)cin從右往左錄入
  • 2.再如:

    cin >> n[i]>>n[++i];

    ——錯誤的使用
#include "stdafx.h"
#include <iostream>
using namespace std;

int main(){
 n[10], i = 0;
	cin >> n[i]>>n[++i];
/*在鍵盤用以下格式輸入兩個數(中間空格),然後回車。
1 2
*/
cout << n[i - 1] << " " << n[i]<<endl;
return 0;
}
           

輸出結果:

001C++之cin&gt;&gt;[i]&gt;&gt;[++i]或cin&gt;&gt;[i]&gt;&gt;[i++]的誤用開門見山:(編譯器中)cin從右往左錄入
  • 3.最後

    cin >> n[i]; cin>>n[++i];

    ——正确的使用
#include "stdafx.h"
#include <iostream>
using namespace std;

int main(){
 n[10], i = 0;
	cin >> n[i];
	cin>>n[++i];
/*在鍵盤用以下格式輸入兩個數(中間空格),然後回車。
1 2
*/
cout << n[i - 1] << " " << n[i]<<endl;
return 0;
}
           

輸出結果:

001C++之cin&gt;&gt;[i]&gt;&gt;[++i]或cin&gt;&gt;[i]&gt;&gt;[i++]的誤用開門見山:(編譯器中)cin從右往左錄入

注意

  • 數組未指派時的值是不确定的.
  • ++, --(自增、自減)
  • 例:i++; j–;

    後置運算符:先去一個副本參與運算,然後運算完後原加1.

  • 例:–i; ++j;

    前置運算符:先加減,然後參與運算

    由此可以證得

    cin輸入

    指派其是一個

    入棧出棧

    的過程,遵循

    先入後出,後入先出

    的原則。

    同時第三種才是

    正确的數組同時cin

    的方法!

繼續閱讀