Both expresions from a reference book (www.bogotobogo.com/cplusplus/files/ThinkingInCPlusPlusVolumeOne.pdf) I tried but work badly, looks like reads keyboard but nor c neither x got the value of the key pressed. Editor (VS 2019 Win 10) don't identify as mistake, debugger reveals that c or x don't receive the value.
full sample program is:
//: C03:OnTheFly.cpp
// On-the-fly variable definitions
 #include <iostream>
 using namespace std;  
 int main()
 {
   //..   { // Begin a new scope     int q = 0; // C requires definitions here
   //..     // Define at point of use:
   for(int i = 0; i < 100; i++)
     { 
         q++; // q comes from a larger scope
              // Definition at the end of the scope:
         int p = 12;
      }
      int p = 1;  // A different p
    } // End scope containing q & outer p
   cout << "Type characters:" << endl;
   while(char c = cin.get() != 'q')
   {     
        cout << c << " wasn't it" << endl;
        if(char x = c == 'a' || c == 'b')
           cout << "You typed a or b" << endl;
        else
           cout << "You typed " << x << endl;
   }   
   cout << "Type A, B, or C" << endl;
   switch(int i = cin.get())
   {     
       case 'A': cout << "Snap" << endl;
       break;
       case 'B': cout << "Crackle" << endl;
       break;
       case 'C': cout << "Pop" << endl;
       break;
       default: cout << "Not A, B or C!" << endl;
   }
}
///:~ 
Is some problem of version of C++ ? I tried with dafault option for C++ version ant also with C++11, C++14, C++17.
