在 C# 中使用 ReadLine 方法
Posted
技术标签:
【中文标题】在 C# 中使用 ReadLine 方法【英文标题】:Consume ReadLine method in C# 【发布时间】:2015-01-26 03:58:01 【问题描述】:我有一个接受输入的程序:读取的第一行是要给出的坐标数,其余行是坐标本身。它读取所有坐标并找到任意两点之间的最短距离(两个最近坐标之间的距离),然后显示距离和找到答案所需的时间。
我的问题是,当我运行程序时,我必须按 Enter 键才能计算“找到答案所需的时间”。我必须使用 1000 个整数的输入数据,所以我必须将数字 粘贴 到控制台中 - 然后立即按 Enter 键,以免花费太多时间。
我的问题是:使用 ReadLine 方法的最简单方法是什么,以便程序的 Stopwatch
对象不必等待按下 Enter 键。我无法解决这个问题。
这是我的程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Numerics;
namespace ConsoleApplication2
class Program
static void Main(string[] args)
double smallestDistance = 0.0;
int numberOfPoints = 0;
String userInput = "";
String coordinate = "";
int coordinatesEntered = 0;
//Grab the number of points that will be used.
userInput = Console.ReadLine();
//Try and convert and store the input to an integer.
numberOfPoints = Convert.ToInt32(userInput);
int[] xcoords = new int[numberOfPoints];
int[] ycoords = new int[numberOfPoints];
//Create a new stopwatch in order to time program.
Stopwatch sw = Stopwatch.StartNew();
//Get all the points.
while(coordinatesEntered < numberOfPoints)
coordinate = Console.ReadLine();
string[] numbers = coordinate.Split(' ');
xcoords[coordinatesEntered] = Convert.ToInt32(numbers[0]);
ycoords[coordinatesEntered] = Convert.ToInt32(numbers[1]);
coordinatesEntered++;
//end while
smallestDistance = getShortestDistance(xcoords, ycoords, numberOfPoints);
sw.Stop ( );
Console.Write ("\n");
Console.WriteLine(string.Format("0:N6", Math.Sqrt(smallestDistance)));
Console.WriteLine ("Time used: 0 secs", sw.Elapsed.TotalMilliseconds / 1000);
Console.ReadKey ( );
public static double getShortestDistance(int[] x, int[] y, int numOfCoords)
int i;
int j;
double shortestDistance = 0;
for (i = 0; i<numOfCoords-1 ; i++)
for (j= i+1 ; j<numOfCoords ; j++)
double xresultsqrd = Math.Pow((x[j] - x[i]), 2.0);
double yresultsqrd = Math.Pow((y[j] - y[i]), 2.0);
double finalResult = xresultsqrd + yresultsqrd;
if(i == 0)
shortestDistance = finalResult;
else if(finalResult < shortestDistance)
shortestDistance = finalResult;
//end elseif
//end inner-for
//end outer-for
return shortestDistance;
//end getShortestDistance;
//end class Program
//end namespace ConsoleApplication2
这是输入所需的txt文件: http://hastebin.com/zulowuvuyu.lisp
我认为问题在于 ReadLine
方法正在等待按下 Enter,但由于我是 Pasting 没有读取 Enter 键。如何使 ReadLine 停止寻找要按下的 Enter(也就是使用该方法)?
【问题讨论】:
您是否要测量输入坐标所需的时间?还是只是计算所需的时间? 另外,如果数据已经在一个文件中(你正在从某个地方复制),为什么不直接读取文件呢? 最好的办法是从@Rufus L 提到的文件中读取您的输入 我正在尝试计算执行计算所需的时间。我实际上需要手动输入文本,因此我无法使用 StreamReader 为什么不将秒表移到 while 循环之后? 【参考方案1】:有很多方法,但在输入列表中添加一个额外的回车就可以了。
更好的解决方案是:
从不同的来源(如文件)读取它 使用Console.In
将输入作为流读取
【讨论】:
最好添加为评论而不是答案:) 为什么?我不是在回答问题吗?他要求最简单的解决方案 编辑后的答案似乎更好。代码 sn-p 也不错。 我看不出将输入作为流读取会有什么帮助。请详细说明。流不会终止最后一行,无论是使用换行符还是到达流的末尾,因此很难看出该建议将如何改进。以上是关于在 C# 中使用 ReadLine 方法的主要内容,如果未能解决你的问题,请参考以下文章
C# StreamReader,自定义分隔符的“ReadLine”