¿Cómo obtener un personaje de stdin sin esperar a que el usuario lo ponga? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Cómo evitar presionar enter con getchar () 10 respuestas

Estoy escribiendo un programa en C que imprime algo en la terminal usando ncurses. Debería dejar de imprimir cuando el usuario presione 's' y continuar nuevamente cuando presione 's'. ¿Cómo puedo leer una tecla de entrada sin esperar que el usuario presione la tecla?

Lo intentégetch() ygetchar() pero esperan hasta que se presione una tecla ...

Edita

Este es mi código:

int main(void)
{
   initscr(); /* Start curses mode         */
   refresh(); /* Print it on to the real screen */
   int i = 0, j = 0;
   int state = 0;
   while (1)
   {
      cbreak();
      int c = getch(); /* Wait for user input */
      switch (c)
      {
         case 'q':
            endwin();
            return 0;
         case 'c':
            state = 1;
            break;
         case 's':
            state = 0;
            break;
         default:
            state = 1;
            break;
      }
      if(state)
      {
         move(i, j);
         i++;
         j++;
         printf("a");
         refresh();
      }
   }
   nocbreak();
   return 0;
}

EDIT 2 Esto funciona bien. Obtuve 100 puntos:)

#include <stdio.h>
#include <stdlib.h>
#include <curses.h>

int main(void)
{
   initscr();
   noecho();
   cbreak();         // don't interrupt for user input
   timeout(500);     // wait 500ms for key press
   int c = 0;        // command: [c|q|s]
   int s = 1;        // state: 1= print, 0= don't print ;-)
   int i = 0, j = 0;
   while (c != 'q')
   {
      int c = getch();
      switch (c)
      {
         case 'q':
            endwin();
            return 0;
         case 'c':
            s = 1;
            break;
         case 's':
            s = 0;
            break;
         default:
            break;
      }
      if (s)
      {
         move(i, j);
         printw("a");
         i++;
         j++;
      }
   }
   endwin();
   nocbreak();
   return 0;
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta