# [C (gcc)], 139 bytes

Compile with `-Dk="_nZZiaeY"` (included in byte count). -2 bytes if prompt `>>\n` is allowed.

<!-- language-all: lang-c -->

    x;f(c){for(printf(">>");c=getchar()-10;x+=c--?c--?c--?c||printf("%i\n",x),0:x*x-x:-1:1,x*=~x&&x^256)c=strchr(k,c)-k>>1;f();}

[Try it online!][TIO-jofrg5va]

[C (gcc)]: https://gcc.gnu.org/
[TIO-jofrg5va]: https://tio.run/##ZY3dCoJAEIXv9yliodgtBzWoC2XtppcoopBJbbE0doUG@nn0NhWKosOcMx/MwEEoEJ2jOBcor3ltxNnoqskFTxIuY1RF1uAhNUJCGMQ0UQiw@Ph2e38P9abiHkkviGhMQBGEUejRWD1oNKLtdDaXqGxj8GBE6aGEMknCtlTGd9@HZan4rlqvdZqtuDuluhLyyroruzvStrQ165a2yPat6kGff/wNPfaja8bYE/NjWlgHF/db9wI "C (gcc) – Try It Online"

## Degolf

    /** Preprocessor **/
    -Dk="_nZZiaeY" // This is a lookup string; it corresponds to "ixddskoc",
                   // with 10 deducted from each character. Upon compilation, 
                   // all occurences of the string literal are replaced with a 
                   // pointer to its location in memory.

    /** Source **/
    x;f(c){ // x: 32-bit accumulator, c: local variable for read character
        for(printf(">>"); // Start for-loop and print prompt.
                c=getchar()-10; // Read a character from STDIN.
                                // Loop breaks if it is '\n'.
                
                // The below happens at the end of each iteration.
                x+=c--?c--?c--? 
                   // Find the correct operation by testing c and post-
                   // decrementing with multiple ternary-ifs. If c is 0, 
                   // operation was found, add the else-value to the 
                   // accumulator x.
                   //     If the character is invalid, the value of c is
                   // very large, and will not reach 0 with 3 decrements.
                      
                   c||printf("%i\n",x),0 
                   // If c-3 is 0, print accumulator, else do nothing.
                   // Returns 0 regardless of what happens. (No change to x)
                   :x*x-x 
                   // Square. Results in x=x+x*x-x, and is shorter than (x*=x)
                   :-1:1, 
                   // Decrement, Increment.
                   x*=~x&&x^256 
                   // Because -1==0xffffffff, ~x==0 when x==-1. Likewise,
                   // x^256==0 only when x==256. The logical-AND coerces the result
                   // to boolean 1 (no match) or 0 (match). Multiplication resets
                   // the accumulator as appropriate.
               )
            // This is the actual body of the for-loop
            c=strchr(k,c)-k>>1; 
               // Finds the index of the read character in the lookup string,
               // then "divides" it by two.
               // Because strchr() returns NULL (0) when character is not found,
               // deducting k from it results in a very negative number.
               // The right-shift results in division by 2 for positive numbers, 
               // while the negative numbers become very large positive numbers
               // (c >= 0x70000000) because of the 2's complement representation.
        // Finally, recurse until forceful termination.
        f();
    }