c++中我們經常定義實時變量,如:
for(int i = 0; i < 10; i++)
{
//....
}
這裏就定義了一個實時變量i,作用域爲整個for循環
那麼這麼一段代碼呢:
while((char c = cin.get()) != 'q')
{
//.....
}
這段代碼也定義了一個實時變量c,咋一看這段代碼是沒有問題的
但是在編譯器中是會報錯的
原因是什麼呢??
(char c = cin.get())
這一句定義了一個實時變量c,而這個變量的作用域只在括號呢,當這個括號內運算完畢後,變量c便無效了~
再與'q'進行比較,因此編譯器肯定會報錯咯~~
這種情況下就不會出錯:
while(char c = cin.get() != 'q')
{
//.......
}
這樣的話c的作用域就是整個while循環
但由於!= 的優先級比 = 高
於是先進行cin.get() != 'q'的比較,然後將比較後的結果由bool型轉爲char型賦給c
所以若輸入不爲q時,c的值會爲笑臉
以下是正確且符合要求的代碼:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(void)
{
char c;
while( (c = cin.get()) != 'q')
{
cout << c;
}
system("pause");
}