Comment puis-je empêcher le scanf() pour attendre éternellement un caractère d'entrée?

Que je veux accomplir les choses suivantes dans une application de console:

  1. Si l'utilisateur tape un caractère, l'application va faire le
    la tâche correspondante. Par exemple, si les entrées de l'utilisateur 1, le programme
    va faire tâche 1, si les entrées de l'utilisateur q, le programme se ferme;
  2. Si les entrées de l'utilisateur de rien, le programme fera la tâche par défaut toutes les 10 secondes (le temps n'a pas besoin d'être très strict).

Voici mon code:

#include <stdio.h>
#include <time.h>

char buff[64];
char command;

while(command != 'q')
{
   begin:
   printf(">> ");
   scanf("%s", buff);
   command = buff[0];

   switch (command)
   {
       case '1':
       //task 1 code will be added here;
          break;
       case '2':
       //task 2 code will be added here;
          break;
       case 'q':
          printf("quit the loop.\n");
          break;
   }

   //wait for 10 seconds;
   Sleep(10000);
   //default task code will be added here;

  if(command != 'q')
  {
     goto begin;
  }

}

Mais le problème est que le programme va piéger à la ligne de scanf() fonction pour toujours attendre pour l'entrée de caractères, si aucun caractère n'est saisi. Alors je me demandais comment faire pour ignorer la ligne de scanf() après un certain temps, je veux dire par exemple, si pas d'entrée après 1 seconde, le programme peut continuer, de manière à remplir la deuxième chose énumérés ci-dessus.

La plate-forme de Windows, si il le faut.

j'ai enlevé le point-virgule après la while() c'était une erreur évidente.

Je ne pense pas qu'il y a un moyen standard pour atteindre cet à - dire un délai d'attente. La plate-forme ciblez-vous ?
quelle plate-forme vous êtes sur. Si vous êtes sous linux, vous pourriez poll ou select pour voir si quelque chose se produit sur STDIN_FILENO
goto commencer? vous êtes le tester dans la condition du while (qui se termine à la ;, donc supprimer ce), de sorte que vous n'en avez pas besoin (plutôt un "continuer"), ni la if. — pour faire plus "interactive" de l'entrée, vous pouvez prendre un coup d'oeil à la bibliothèque ncurses; il y a de la documentation sur de SORTE que vous pourriez être intéressé, par exemple, here;peut-être que vous pouvez organiser quelque chose avec délai d'attente — mais bien sûr, votre code ne dépendent que de la bibliothèque qui ne fait pas partie de la std lib.
double possible de Délai d'attente de la mise en œuvre en C pour TFTP
vous n'avez pas initialiser commanddonc la première boucle n'est pas défini. Aussi, supprimer ; à la fin de la boucle while ou que votre programme ne boucle à tous

OriginalL'auteur user3208536 | 2014-01-17