2009-10-19 9 views
4

J'utilise Visual Studio 2008 pour C#. Je ne peux pas comprendre pourquoi ce code simple ne fonctionne pas comme prévu. Des idées? Merci!Pourquoi Read() ne fonctionne-t-il pas comme prévu?

using System; 

namespace TryRead 
{ 
    class Program 
    { 
     static void Main() 
     { 
      int aNumber; 
      Console.Write("Enter a single character: "); 
      aNumber = Console.Read(); **//Program waits for [Enter] key. Why?** 
      Console.WriteLine("The value of the character entered: " + aNumber); 
      Console.Read(); **//Program does not wait for a key press. Why?** 
     } 
    } 
} 

Répondre

4

// programme attend que la touche [Entrée]. Pourquoi?

La méthode Read bloque son retour pendant que vous tapez des caractères d'entrée; il se termine lorsque vous appuyez sur la touche Entrée. Appuyer sur Entrée ajoute une séquence de terminaison de ligne dépendant de la plate-forme à votre entrée (par exemple, Windows ajoute une séquence de retour chariot-saut de ligne).

// Le programme n'attend pas une touche appuyez sur. Pourquoi?

Les appels suivants à la méthode Read récupèrent votre entrée un caractère à la fois [sans blocage]. Une fois le dernier caractère récupéré, Read le bloque de nouveau et le cycle se répète.

http://msdn.microsoft.com/en-us/library/system.console.read.aspx

+0

Nous vous remercions de votre réponse. Pour une raison quelconque, le livre que j'utilise pour apprendre C# (Programmation C# de l'analyse de problèmes à la conception de programme par Barbara Doyle) ne fait aucune mention de ce comportement. Quelqu'un d'autre a suggéré KeyAvailable. Je pense que je vais y jeter un coup d'oeil. – Jimmy

+0

En d'autres termes, Read() est censé faire une boucle sur les caractères entrés * après que * la touche Entrée a été pressée, pas pendant que les touches sont enfoncées. – Greg

+0

Apparemment, je suis trop novice pour comprendre KeyAvailable, et l'aide semble indiquer que ReadKey fait référence au registre. Je suppose que je vais juste utiliser ReadLine à la place. Je suis surpris que ce code ne semble pas donner le résultat que le livre indiqué se produirait. Des suggestions de livres pour un greenhorn? – Jimmy

2

Vous devez utiliser Console.ReadKey() au lieu de Console.Read().

Questions connexes