2012-10-27 4 views
4

Hey les gars, j'ai besoin d'aide avec mon programme que je fais, j'ai tout compris mais un.ligne de commande variable/chaîne

Mon code ressemble à quelque chose comme ça, mais j'ai raccourci un peu ...

public static void mainvoid() 
{ 
    string line = Console.ReadLine().ToLower(); 
    if (line == "restart") 
    { 
     Console.Clear(); 
     Main(); 
    } 
    if (line == "enter a value: ") 
    { 
     string value = console.ReadLine(); 
     console.writeline("Your value is {0}", value); 
     mainvoid(); 
    } 
    if (line == "my name") 
    { 
     Console.WriteLine("Your name is {0}",  ConsoleApplication1.Properties.Settings.Default.name); 
     mainvoid(); 
    } 

Je veux que mon programme pour récupérer une commande (sorcière je l'ai fait ...) et certains d'entre eux avoir des valeurs/chaînes après eux par la façon dont je me sers C# 2010 Je veux que ma commande pour ressembler à ceci

Mon nom est Daniel
et ainsi la chaîne/valeur = Daniel ou
name = billy si la chaîne/value = billy

Donc je veux qu'il le récupère via console.readline(); et choisir qu'il change le nom et après cela sera le nom dans lequel il sera changé.

Mais je ne sais pas comment faire le dernier bit de la valeur/chaîne que je peux aussi utiliser ... S'il vous plaît laisser un commentaire si vous pouvez me aider :)

+4

n'est pas différent de vouloir. S'il vous plaît, faites-le bien. – nawfal

+2

merci beaucoup varier ... –

+2

@nawfal StackOverflow est une plate-forme ouverte, comme un wiki, vous pouvez facilement modifier la question de quelqu'un pour corriger les fautes d'orthographe, plutôt que de laisser des commentaires inutiles. Voir http://stackoverflow.com/faq#editing – MattDavey

Répondre

0

Je peux voir qu'il y a deux problèmes ici, l'un est l'extraction du nom de personnes de la "mon nom est xyz ", l'autre sauvegarde cette valeur pour plus tard dans le programme. En raison de la façon dont vous avez structuré votre mainmethod, et le fait qu'il s'appelle lui-même (ceci est appelé récursion), il ne peut pas partager de variables d'un appel à l'autre. Cela rend impossible le stockage du nom des personnes. Vous pouvez éliminer la récursion en créant à la place une boucle dans le mainmethod

static public void Main() 
{ 
    string currentLine; 

    do 
    { 
     currentLine = Console.ReadLine(); 
    } 
    while (!currentLine.Equals("exit")) 
} 

Cela permettra en permanence à l'utilisateur d'entrer des commandes, et le programme prendra fin lorsque l'utilisateur entre « sortie ».

maintenant sur le problème du stockage du nom de l'utilisateur, vous pouvez simplement supprimer le « mon nom est » partie de la phrase pour obtenir le nom de l'utilisateur ...

static public void Main() 
{ 
    string username = "Matthew"; 

    string currentLine; 

    do 
    { 
     currentLine = Console.ReadLine(); 

     if (currentLine.Equals("restart")) 
     { 
      Console.Clear(); 
     } 

     if (currentLine.StartsWith("my name is")) 
     { 
      username = currentLine.Replace("my name is ", ""); 
     } 

     if (currentLine.Equals("my name")) 
     { 
      Console.WriteLine("Your name is {0}", username); 
     } 
    } 
    while (!currentLine.Equals("exit")) 
} 

J'espère que vous fait bouger!

+0

merci allot Matt ça fonctionne bien sur un nouveau projet de test, va essayer et le mettre dans mon projet principal maintenant: D –

0

Si vous ne voulez pas pour ramasser la commande par Console.ReadLine() choisissez-le avec Console.ReadKey(true). Votre texte ne changera pas.

Voici par exemple:

ConsoleKeyInfo ck = Console.ReadKey(true); 
if(ck.Key == Keys.Space){ 
//do something 
} 

je ne vous comprends pas bien, mais je vais essayer :) guess

Si vous voulez retrive le nom, vous pouvez écrire comme ceci:

Console.Write("Your name is "); 
string name = Console.ReadLine(); 
+0

Je ne vais pas la commande pour produire une valeur après par exemple: Bob –

+0

JesseJames, je sais à propos de ce code, mais je ne vais pas le faire comme ça ... Je ne vais pas dans la même ligne que le code, par exemple. MYNAME = james et james seront la chaîne ... –

1

Vous devez probablement créer votre propre syntaxe.

Pour exemple, j'ai choisi une syntaxe comme ci-dessous

<Command Name>:Parameters  
ChangeName:Daniel 

Testez ensuite ENUM pour définir vos commandes

enum Command 
{ 
     ChangeName 
} 

// Maintenant, nous pouvons analyser la commande et prendre une action requise

//Split the string 
String[] inputs= Console.ReadLine().Split(":");//"ChangeName:Bob" 

//Generate the enumeration type from the input command 
var cmd = (Command) Enum.Parse(typeof(Command), inputs[0] , false); 

if(cmd == Command.ChangeName) 
{ 
//Process the parameters in inputs[1] 
} 
+0

Pensez-vous que cela complique un peu les choses? – MattDavey

+0

@Matt: les enums? :) –

+0

ouais .. Je peux voir que c'est une bonne solution extensible et je ferais probablement quelque chose de similaire moi-même, mais l'OP est clairement nouveau pour C# donc je me demandais si cela pourrait être un peu exagéré pour lui. – MattDavey