“如果”部分未执行(C#)

时间:2015-10-07 23:51:16

标签: c# if-statement

作为我编程课程的一部分,我对它很新,所以我需要一些帮助。

我必须创建一个执行以下操作的程序(松散翻译):

  1. 创建一个让孩子练习数学的程序;

  2. 让他输入数字,算术运算符,另一个数字,最后是等式的答案;

  3. 如果上述等式的答案是正确的,则显示一条消息“Bravo”;

  4. 如果答案不正确。让他输入另一个答案。他最多有8次机会(包括第一次机会);以及

  5. 如果经过8次尝试,他仍然无法得到他自己方程的答案,你可以告诉他休息一下。

  6. 我的代码中的问题是最后一个条件(if(ans == nb3))永远不会执行。

    例如,我输入1 - 1 = 5.我会说我的答案是false而且我需要输入另一个答案,到目前为止,一切都很好。如果我在那之后键入正确的答案(1 - 1 = 0),它仍然会要求我输入另一个答案而不是打破循环。

    我的计划的当前状态:

            int nb1, nb2, nb3, ans = 0;
            string op;
            Console.WriteLine("Entrez un premier chiffre");
            nb1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Entrez un operateur arithmetique ");
            op = Convert.ToString(Console.ReadLine());
            Console.WriteLine("Entrez un deuxieme chiffre");
            nb2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Quel est la reponse");
            nb3 = Convert.ToInt32(Console.ReadLine());
    
    
            switch (op)
            {
    
                case ("+"):
                case ("plus"):
                    ans = nb1 + nb2;
                    break;
    
                case ("-"):
                case ("moins"):
                    ans = nb1 - nb2;
                    break;
    
                case ("*"):
                case ("multiplie"):
                    ans = nb1 * nb2;
                    break;
    
                case ("/"):
                case ("divise"):
                    ans = nb1 / nb2;
                    break;
            }
    
            if (ans == nb3)
                Console.WriteLine("Bravo");
    
            else
            {
                Console.WriteLine("Mauvaise reponse");
                for (int t = 1; t < 8; t++)
                {
    
                    Console.WriteLine("Quel est la reponse?");
                    Console.ReadLine();
                        if (ans == nb3)
                        {
                            break;
                        }
    
                   }
                }
    
            }
        }
    
    }     
    

1 个答案:

答案 0 :(得分:3)

您永远不会在for循环中重新分配输入变量:

 for (int t = 1; t < 8; t++)
 {  
     Console.WriteLine("Quel est la reponse?");
     Console.ReadLine();
     if (ans == nb3)
         break;   
 }

请注意,您对Console.ReadLine的返回值不执行任何操作。你需要

for (int t = 1; t < 8; t++)
{  
    Console.WriteLine("Quel est la reponse?");
    nb3 = int.Parse(Console.ReadLine());
      if (ans == nb3)
         break;    
}

这样新用户输入将与ans进行比较,而不是先前输入的值。

作为一种风格问题,尽量避免像&#34; nb1&#34;等变量名称。 &#34; NB2&#34;和&#34; nb3&#34;因为它们不是很具描述性。此外,如果您有这样的编号变量,那么几乎可以肯定您需要一个数组而不是多个变量。