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();
}
}
Le fichier comprend les éléments suivants:Coincé dans une boucle
ounce,gram,28.0
pound,ounce,16.0
pound,kilogram,0.454
pint,litre,0.568
inch,centimetre,2.5
mile,inch,63360.0
L'utilisateur saisira quelque chose comme 6, once, gramme
L'idée est qu'il trouve la bonne ligne en vérifiant si les premier et second mots du fichier sont les mêmes que les deuxième et troisième mots saisis par l'utilisateur.
Le problème est que si elle vérifie la première ligne et échoue l'instruction if, si elle passe à l'instruction else et s'arrête. J'essaie de trouver un moyen où il s'arrêtera après qu'il trouve la ligne correcte mais pas avant. Si quelqu'un tape une valeur qui ne se trouve pas dans le fichier, une erreur doit apparaître.
Vous êtes mieux sur la piste que j'étais, mais l'autre serait toujours sur le mauvais niveau (ie une erreur par ligne dans le fichier de définition de conversion, pas une erreur par mauvaise entrée) –
@Ben - Je n'ai pas pris la peine de vérifier si l'interface était correct. Il est clair que le message d'erreur doit sortir de la boucle interne, auquel cas la clause else n'est même pas nécessaire. En outre, je considérerais obtenir les données de conversion une seule fois et les stocker en interne de sorte qu'il n'est pas nécessaire de les relire à chaque fois. Si vous faites cela, alors la boucle interne devient une simple recherche dans un dictionnaire. – tvanfosson
-1, car il traite toujours chaque ligne qui ne correspond pas à une erreur. Il ne résout pas le problème de comment vérifier le fichier entier avant d'échouer. – Tesserex