2010-04-08 5 views
0

J'essaie d'apprendre C# et j'ai un problème avec le code suivant:C# problème débutant

using System; 

class IfSelect 
{ 
    public static void Main() 
    { 
     string myInput; 
     int myInt; 
     Console.Write("Please enter a number: "); 
     myInput = Console.ReadLine(); 
     myInt = Int32.Parse(myInput); 

     if (myInt = 10) 
     { 
      Console.WriteLine("Your number is 10.", myInt); 
     } 
    } 
} 
+10

et votre problème est? – WhirlWind

+4

Pour clarifier le point de WhirlWind, "j'ai un problème avec le code suivant" est très vague. Avec des échantillons de code plus difficiles, il peut être presque impossible de comprendre ce qui ne va pas sans plus d'informations: par exemple, en publiant un texte d'erreur de compilateur; ou décrivant une erreur d'exécution, idéalement avec un message d'exception et une trace de pile attachés. – Dathan

Répondre

24
if(myInt = 10) 

Affecte la valeur de 10-myInt au lieu de vérifier l'égalité. Il devrait être:

if(myInt == 10) 

qui est la syntaxe correcte pour l'égalité des tests.

12

Ce:

if (myInt = 10) 

a besoin d'être ceci:

if (myInt == 10) 

ou il pourrait être cela aussi:

if(myInt.Equals(10)) 

Je sais qu'il est probablement juste une faute de frappe, mais je pensais J'inclurais le lien quand même:

http://msdn.microsoft.com/en-us/library/53k8ybth.aspx

ici est un lien vers la fonction Equals:

http://msdn.microsoft.com/en-us/library/ms173147(VS.80).aspx

En fait

ceci: myInt = Int32.Parse(myInput); devrait probablement être quelque chose comme ça aussi

int myInt; 

if(Int32.TryParse(myInput, out myInt)) 
{ 
    rest of code. 
} 
else 
{ 
    Console.WriteLine("You didn't provide a number"); 
} 

Juste au cas où l'entrée fournie n'est pas un nombre.

http://msdn.microsoft.com/en-us/library/system.int32.tryparse.aspx

7

Au lieu de if (myInt = 10) vous devez utiliser if (myInt == 10).

Le premier est l'opérateur d'affectation, le second est un opérateur de comparaison.

2
if (myInt = 10) 
    { 
    Console.WriteLine("Your number is 10.", myInt); 
    } 

Si changer =-== pour vérifier l'égalité

4

changement

if (myInt = 10) 

à

if (myInt == 10) 
5

Votre instruction if assigne 10 à myInt plutôt que de tester pour l'égalité.

Faites ceci:

if(myInt == 10) 
0

En plus d'utiliser == au lieu de = il est également une bonne pratique de mettre la valeur avant la variable comme

if(10 == myInt) 

Ainsi, le compilateur attraper lorsque vous seulement mettre 1 signe égal par accident.

+1

Puisqu'il s'agit de C# plutôt que de C, le compilateur va attraper la conversion implicite tentée de int à bool, donc mettre la valeur constante en premier est inutile. –

+0

@jeffrey: inutile, sauf si vous comparez les booléens :) – jmster

+0

@jeffrey Votre droit. C'est juste une habitude que j'ai apportée avec C et je n'y ai jamais vraiment pensé. Cependant on pourrait penser que l'erreur du compilateur aurait pointé cette affiche directement sur le problème. @jmster Je grince des dents quand je vois quelqu'un comparer les valeurs booléennes. – juharr

3

En passant, vous utilisez l'opérateur d'affectation, pas l'opérateur d'égalité. if (myInt = 10) devrait probablement être if (myInt == 10).

En outre, dans

Console.WriteLine("Your number is 10.", myInt); 

le paramètre myInt est inutile. Si l'une des utiliser

Console.WriteLine("Your number is 10."); 

ou

Console.WriteLine("Your number is {0}.", myInt); 
+0

Console.WriteLine intègre la chaîne.Formater la fonctionnalité, de sorte que le dernier bit de code pourrait être raccourci. –

+0

@ Jeffrey Je ne le savais pas. Merci pour l'info! – Dathan

+0

@Jeffrey J'ai mis à jour ma réponse pour refléter votre commentaire. Merci. – Dathan

1

Je pense qu'il ya trois problèmes:

  1. Il ne compile pas. (myInt = 10) n'attribue pas à myInt - il ne compilera pas.
  2. Si elle l'a fait,

    Console.WriteLine ("Votre numéro est 10.", myInt);

    aura toujours afficher 10.

  3. Vous ne pourrez pas voir le résultat.

les opérations suivantes:

class IfSelect 
{ 
public static void Main() 
{ 
    string myInput; 
    int myInt; 
    Console.Write("Please enter a number: "); 
    myInput = Console.ReadLine(); 
    myInt = Int32.Parse(myInput); 

    if (myInt == 10) 
    { 
     Console.WriteLine(string.Format("Your number is {0}. Press any key.", myInt)); 
     Console.ReadLine(); 
    } 
} 
} 
+1

Il affichera toujours 10! Mais au moins dans votre version, les modifications seront plus simples si les spécifications changent (ce qu'elles font toujours). –

1

Vous pouvez essayer cela, où vous utilisez StreamReader pour capturer l'entrée via la console.

Deuxièmement, vous avez besoin de == (ce qui signifie "Equals") au lieu de (=) qui est un opérateur d'affectation une erreur courante lorsque vous commencez à programmer.

Ceci cependant ne fonctionnera pas car mon code aura une erreur, mais ceci donne juste un exemple d'où votre erreur est.

class IfSelect 
{ 
    public static void Main() 
    { 
      string myInput; 
      int myInt; 

      StreamReader reader = new StreamReader(); 

      Console.Write("Please enter a number: "); 
      myInput = reader.ReadLine(); 
      myInt = Int32.Parse(myInput); 

      if (myInt == 10) 
      { 
       Console.WriteLine("Your number is 10.", myInt); 
      } 
     } 

    }