-1

我有一个任务,我必须创建代码来显示因子以及数字是否是完美数和/或质数。我认为我拥有运行程序的所有代码,但是当我到达最后一行(Console.ReadLine())时,我希望按回车然后退出程序。目前,当我按 Enter 时,程序会一遍又一遍地显示它是质数和/或完美数(每次按 Enter 时)。所以基本上,它会一遍又一遍地执行 while 循环之后的所有内容。

请记住,我对 C# 很陌生,所以我的一些语法和可读性可能很奇怪。我只对能帮助我解决 ReadLine 问题的答案感兴趣。我的导师将帮助我使我的代码更具可读性和组织性。

谢谢你的建议!这是我的代码。我评论了 ReadLine 没有关闭程序的地方:

using System;

namespace Factorizer.UI
{
    class Program
    {
        static void Main(string[] args)
        {
            string input;
            int num, i, x = 0, sum = 0;

            while (true)
            {
                Console.Write("Enter a number: ");
                input = Console.ReadLine();

                if (int.TryParse(input, out num))
                {
                    Console.Write("\nThe factors are: ");

                    for (i = 1; i <= num; i++)
                    {
                        if (num % i == 0)
                        {
                            Console.Write("{0} ", i);
                        }
                    }
                    break;
                }
                else
                {
                    Console.WriteLine("\nThat was not a valid number!\n");
                }
            }

            for (i = 1; i < num; i++)
            {
                if (num % i == 0)
                {
                    sum = sum + i;
                }
                if (sum == num)
                {
                    Console.Write("\n\n{0} is a perfect number.\n", num);
                }
                else
                {
                    Console.Write("\n\n{0} is not a perfect number.\n", num);
                }

            for (i = 2; i <= num / 2; i++)
            {
                if (num % i == 0)
                {
                    x++;
                    break;
                }
            }

            if (x == 0 && num != 1)
            {
                Console.Write("\n{0} is a prime number.", num);
            }

            else
            {
                Console.Write("\n{0} is not a prime number.", num);
            }
            Console.ReadLine(); //this isn't closing the program!
            }
        }
    }
}
4

2 回答 2

1

Console.ReadLine()在 for 循环内。在下一个括号之后将其向下移动。

于 2016-11-25T21:02:12.977 回答
1

只要把 Console.ReadLine(); 在 for 之后,它位于 for 块内,这就是为什么它会继续打印并删除您在 while 块之后拥有的 for,如下所示:

string input;
        int num, i, x = 0, sum = 0;

        while (true)
        {
            Console.Write("Enter a number: ");
            input = Console.ReadLine();

            if (int.TryParse(input, out num))
            {
                Console.Write("\nThe factors are: ");

                for (i = 1; i <= num; i++)
                {
                    if (num % i == 0)
                    {
                        Console.Write("{0} ", i);
                    }
                }
                break;
            }
            else
            {
                Console.WriteLine("\nThat was not a valid number!\n");
            }
        }

        /*for (i = 1; i < num; i++)
        {*/
            if (num % i == 0)
            {
                sum = sum + i;
            }
            if (sum == num)
            {
                Console.Write("\n\n{0} is a perfect number.\n", num);
            }
            else
            {
                Console.Write("\n\n{0} is not a perfect number.\n", num);
            }

            for (i = 2; i <= num / 2; i++)
            {
                if (num % i == 0)
                {
                    x++;
                    break;
                }
            }

            if (x == 0 && num != 1)
            {
                Console.Write("\n{0} is a prime number.", num);
            }

            else
            {
                Console.Write("\n{0} is not a prime number.", num);
            }
            Console.ReadLine(); //this isn't closing the program!
        //}
于 2016-11-25T21:02:21.917 回答