2010-02-21 7 views
2

J'essaie d'utiliser une boucle while pour demander à l'utilisateur un nombre compris entre 1 et 10. Alors que l'utilisateur ne parvient pas à entrer un nombre entre 1 et 10 (inclus), je veux demander eux pour un autre nombre.Alors que la boucle ne produit pas de résultats corrects

Mon code à ce jour est:

int i = 0; 
Console.WriteLine("Enter a number."); 
while (i <= 10) 
{ 
    Console.ReadLine(); 

    if (i > 1 && i < 10) 
    { 
     Console.ReadLine(); 
     continue; 
    } 

    if (i < 1 && i > 10) 
    { 
     Console.WriteLine("Enter New Number..."); 
     break; 
    } 

    Console.ReadLine(); 
} 

Qu'est-ce que je fais mal?

+1

S'il vous plaît utiliser un titre plus détaillé pour votre question (que c'est une question C# peut être reconnu par des étiquettes ...) – road242

+4

ce serait bien si vous avez accepté une réponse qui vous a aidé. Au moins 4 ont fait :) SLaks est le meilleur car il vous a donné toutes les réponses et vous a fait réfléchir un peu ^^ – n00b

+2

aussi une note de côté: ne jamais utiliser "i" comme une variable globale. il vous trompera plus tard: D – n00b

Répondre

15

Vous écrivez if (i < 1 && i > 10).
i ne peut jamais être à la fois inférieur à 1 et supérieur à 10.
(Indice: 'et' est le mauvais mot)

De plus, vous n'avez jamais affecté de valeur à i.
(Astuce: appeler int.Parse)

De plus, vous voulez probablement échanger break (qui arrête en boucle) et continue (qui continue en boucle)

En outre, quelle devrait être la condition dans la boucle while être?

+1

meilleure réponse;) il enseigne ne donne pas le code prêt sur une plaque ^^ – n00b

+0

merci pour votre aide ^^ – Saisano

1
if (i < 1 && i > 10) 

à

if (i < 1 || i > 10) 
1

Deux choses:

  • Vous affectez jamais rien mais 0-i - de sorte qu'il ne sera jamais réellement changer. Vous devez analyser l'entrée de l'utilisateur.

  • (i < 1) && (i > 10)(i < 1) && (i > 10) ne peut jamais être vrai, vous pouvez utiliser l'opérateur logique ou || à la place.

0

Avec le conditionnel étant incorrect, il devrait être:

if(i < 1 || i > 10) 

Vous aussi ne pas attribuer i à quoi que ce soit. Vous utilisez Console.ReadLine() mais vous ne le videz pas réellement dans i. Cela vous laisse tomber dans une boucle infinie.

Vous courez également le risque de problèmes de type si la valeur que vous recevez n'est pas un nombre entier. Vous devez effectuer des conversions de type et des vérifications numériques pour éviter les problèmes de moulage.

4
int i = 0; 
while (i < 1 || i > 10) 
{ 
    int.TryParse(Console.ReadLine(),out i); 
} 

ou avec le texte

int i = 0; 
Console.WriteLine("Enter a number"); 
int.TryParse(Console.ReadLine(),out i); 
while (i < 1 || i > 10) 
{ 
    Console.WriteLine("Try Again"); 
    int.TryParse(Console.ReadLine(),out i); 
} 

:)

+0

Merci pour votre aide! – Saisano

0

code non testé

int i = 0; 
int count = 0; 

Console.WriteLine("Enter a number."); 
while (count <= 10) 
{ 
    i = Convert.ToInt32(Console.ReadLine()); 

    if (i > 1 && i < 10) 
    { 
     count++; 
     continue; 

    } 
    if (i < 1 || i > 10) 
    { 
     Console.WriteLine("Enter New Number..."); 
     continue; 
    } 
} 
+0

Merci pour votre aide – Saisano

1

Est-if (i > 1 && i < 10) vraiment ce que vous voulez? Il vérifie si un nombre est supérieur à 1 et inférieur à 10. Que faire si le nombre est 1 ou 10?

+0

il veut que le nombre soit entre 1 et 10. – cpx

+0

Le libellé "entrer un nombre compris entre 1 et 10 (inclus)" me porte à croire que 1 et 10 devraient être considérés comme faisant partie de la gamme. – Gabe

Questions connexes