【发布时间】:2026-01-04 17:35:01
【问题描述】:
我一直在尝试编写代码以在文档(使用 System.IO.StreamWriter)以及控制台中输出从 3 到 int limit 的所有素数。这是我写的代码:
using System;
using System.IO;
namespace primes
{
class Program
{
static void Main(string[] args)
{
string output = "";
a:
Console.Write("Numbers to test >> ");
string limitStr = Console.ReadLine();
int limit = Convert.ToInt32(limitStr);
if (limit < 3)
{
Console.WriteLine("Write an integer above 2.\n");
goto a;
}
DateTime start = DateTime.Now;
for (int i = 0; i < limit; i++)
{
for (int j = 2; j < i; j++)
{
if (j == Math.Ceiling(Convert.ToDouble(i / 2)) + 1)
{
Console.WriteLine(i + " is prime.");
output += Convert.ToString(Convert.ToString(i) + "\n");
}
else if (i % j == 0)
{
goto b;
}
}
b:;
}
using (System.IO.StreamWriter sw = new StreamWriter("primes.txt"))
{
sw.Write(output);
}
string timeElapsed = Convert.ToString((DateTime.Now - start).TotalSeconds);
Console.Write("\nTook " + timeElapsed + " seconds to run.");
ConsoleKeyInfo k;
Console.WriteLine("\nPress ESC to exit...");
while (true)
{
k = Console.ReadKey(true);
if (k.Key == ConsoleKey.Escape)
break;
}
}
}
}
当使用int limit = 50时,我在文本文档中得到这个输出:
3
5
7
11
13
17
19
23
29
31
37
41
43
47
但是当int limit = 1260时,它会输出这个:
ਲ਼ਵㄱㄊਲ਼㜱ㄊਹ㌲㈊ਹㄳ㌊ㄴ㐊ਲ਼㜴㔊ਲ਼㤵㘊㜶㜊㌷㜊ਹ㌸㠊ਹ㜹ㄊㄊ㌰ㄊ㜰ㄊ㤰ㄊ㌱ㄊ㜲ㄊㄳㄊ㜳ㄊ㤳ㄊ㤴ㄊㄵㄊ㜵ㄊ㌶ㄊ㜶ㄊ㌷ㄊ㤷ㄊㄸㄊㄹㄊ㌹ㄊ㜹ㄊ㤹㈊ㄱ㈊㌲㈊㜲㈊㤲㈊㌳㈊㤳㈊ㄴ㈊ㄵ㈊㜵㈊㌶㈊㤶㈊ㄷ㈊㜷㈊ㄸ㈊㌸㈊㌹㌊㜰㌊ㄱ㌊㌱㌊㜱㌊ㄳ㌊㜳㌊㜴㌊㤴㌊㌵㌊㤵㌊㜶㌊㌷㌊㤷㌊㌸㌊㤸㌊㜹㐊㐊㤰㐊㤱㐊ㄲ㐊ㄳ㐊㌳㐊㤳㐊㌴㐊㤴㐊㜵㐊ㄶ㐊㌶㐊㜶㐊㤷㐊㜸㐊ㄹ㐊㤹㔊㌰㔊㤰㔊ㄲ㔊㌲㔊ㄴ㔊㜴㔊㜵㔊㌶㔊㤶㔊ㄷ㔊㜷㔊㜸㔊㌹㔊㤹㘊㘊㜰㘊㌱㘊㜱㘊㤱㘊ㄳ㘊ㄴ㘊㌴㘊㜴㘊㌵㘊㤵㘊ㄶ㘊㌷㘊㜷㘊㌸㘊ㄹ㜊㜊㤰㜊㤱㜊㜲㜊㌳㜊㤳㜊㌴㜊ㄵ㜊㜵㜊ㄶ㜊㤶㜊㌷㜊㜸㜊㜹㠊㤰㠊ㄱ㠊ㄲ㠊㌲㠊㜲㠊㤲㠊㤳㠊㌵㠊㜵㠊㤵㠊㌶㠊㜷㠊ㄸ㠊㌸㠊㜸㤊㜰㤊ㄱ㤊㤱㤊㤲㤊㜳㤊ㄴ㤊㜴㤊㌵㤊㜶㤊ㄷ㤊㜷㤊㌸㤊ㄹ㤊㜹ㄊ〰ਹ〱㌱ㄊਹ〱ㄲㄊ㌰〱㌳ㄊ㌰ਹ〱㤴ㄊ㔰〱ㄶㄊ㘰ਲ਼〱㤶ㄊ㠰〱ㄹㄊ㤰ਲ਼〱㜹ㄊ〱ਲ਼ㄱ㤰ㄊㄱㄱ㌲ㄊ㈱ਹㄱㄵㄊ㔱ਲ਼ㄱ㌶ㄊ㜱ㄱㄸㄊ㠱ㄱ㌹ㄊ〲㈱㌱ㄊㄲ㈱㌲ㄊ㈲ਹ㈱ㄳㄊ㌲㈱㤴ㄊ㔲ਹ
这个行话继续使用越来越大的数字,更多的字符,有时在文本中会出现一些模式。我究竟做错了什么?它在控制台中看起来很好。
信息:使用 Visual Studio Community 2019 进行编辑
使用 Windows 10 Home Notepad.exe 访问primes.txt
【问题讨论】:
-
请不要使用 goto。 #spaghetticode “goto a”可以替换为while循环。 “goto b”可以用一个简单的“break”代替。
-
@BryanWilliams 这就是要使用的代码!我只是把它放在一起作为测试,因为我忘记了格式。
-
即“3\n5\n7\n...”,编码为utf16。您使用的任何文本查看器都不知道它是 utf8 文本。记事本会尝试自动检测文件是否缺少 BOM,有时它会猜错。当行尾是 \n 而不是 \r\n 时,不太可能发生。 那是怎么发生的很难猜,你必须在*nix机器上运行代码才能弄错。
标签: c# math primes streamwriter