title: Why and how to know when the scanf("%c") store extra data in memory? [C]
body: <p>I wrote a simple program to make basic operation in prefix notation (operator operand1 operand2):</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  
  #define MAX 5
  float operando(char s[], float precedente);
  float operazione(float o1, float o2, char operatore);
  
  int main(void)
  {
      char operatore;
      char operando1[MAX], operando2[MAX];
      float precedente = 0;
      float o1, o2;
  
      printf("Scrivi l'operazione con questo formato: operatore operando1 operando2;\nPREV al posto di uno dei due operandi per usare l'ultimo risultato.\nLettera qualunque per terminare\n");   
      do 
      {
          scanf("%c %s %s", &amp;operatore, operando1, operando2);
          o1 = operando(operando1, precedente);
          o2 = operando(operando2, precedente);
          precedente = operazione(o1, o2, operatore);
          printf("%c %f %f = %f\n\n", operatore, o1, o2, precedente);
          scanf("%*c");
      } while(operatore == '+' || operatore == '-' || operatore == '*' || operatore == '/');
  
      return 0;
  }
  
  float operando(char s[], float precedente)
  {
      if (strcmp(s, "PREV") == 0)
          return precedente;
      else
          return atof(s);
  }
  
  float operazione(float o1, float o2, char operatore)
  {
      switch (operatore)
      {
      case '+':
          return o1 + o2;
          break;
      case '-':
          return o1 - o2;
          break;
      case '*':
          return o1*o2;
          break;
      case '/':
          return o1 / o2;
          break;
      }
  }
  </code></pre>
  
  <p>If I run this program, it works only the first time, then it takes '\n' as character and put it in operator variable. So I add after the last printf a simple line:
      <code>scanf("%*c");</code></p>
  
  <p>With this line the program works correctly.
  I don't understand: why without discarding '\n' it doesn't use the last character read? How can I know, before running a program,  when to discard a character?  </p>