while (true)
{
//read in the file
StreamReader convert = new StreamReader("../../convert.txt");
//define variables
string line = convert.ReadLine();
double conversion;
int numberIn;
double conversionFactor;
//ask for the conversion information
Console.WriteLine("Enter the conversion in the form (Amount, Convert from, Convert to)");
String inputMeasurement = Console.ReadLine();
string[] inputMeasurementArray = inputMeasurement.Split(',');
//loop through the lines looking for a match
while (line != null)
{
string[] fileMeasurementArray = line.Split(',');
if (fileMeasurementArray[0] == inputMeasurementArray[1])
{
if (fileMeasurementArray[1] == inputMeasurementArray[2])
{
Console.WriteLine("The conversion factor for {0} to {1} is {2}", inputMeasurementArray[1], inputMeasurementArray[2], fileMeasurementArray[2]);
//convert to int
numberIn = Convert.ToInt32(inputMeasurementArray[0]);
conversionFactor = Convert.ToDouble(fileMeasurementArray[2]);
conversion = (numberIn * conversionFactor);
Console.WriteLine("{0} {1} is {2} {3} \n", inputMeasurementArray[0], inputMeasurementArray[1], conversion, inputMeasurementArray[2]);
break;
}
}
else
{
Console.WriteLine("Please enter two valid conversion types \n");
break;
}
line = convert.ReadLine();
}
}
该文件包含以下内容:在一个循环滞留
ounce,gram,28.0
pound,ounce,16.0
pound,kilogram,0.454
pint,litre,0.568
inch,centimetre,2.5
mile,inch,63360.0
用户将输入类似6盎司,革兰氏
的想法是,它通过检查找到正确的线如果文件中的第一个和第二个单词与用户输入的第二个和第三个单词相同。
问题是,如果它检查第一行,并且if语句失败,如果通过else语句并停止。我试图找到一种方式,在它找到正确的行后停止,但直到它停止。如果某人键入的值不在文件中,则应该显示错误。
你比我更好的轨道,但其他人仍然会在错误的水平(即在转换定义文件中每行一个错误,而不是错误的输入每个错误) – 2010-04-16 13:45:04
@Ben - 我没有打扰检查接口是正确的。显然,错误信息应该在内部循环之外,在这种情况下,else子句甚至不是必需的。另外,我会考虑只获取一次转换数据并将其存储在内部,因此无需每次重新读取转换数据。如果你这样做,那么内部循环变成一个简单的查找字典。 – tvanfosson 2010-04-16 13:51:08
-1,因为它仍然将每行不匹配为一个错误。它不能解决如何在失败之前检查整个文件的问题。 – Tesserex 2010-04-16 13:53:22