2014-11-24 2 views
0

Я пытаюсь проверить некоторые данные, и мне было интересно, можно ли кодировать оператор if так, чтобы, если есть текстовое значение, введенное вместо числового значения, которое оно не сработает?Если значение = текст?

Очевидно, что стандартное сообщение указывает на то, что введено неправильное сообщение.

Я напишу здесь пример:

Console.WriteLine("Please enter your height in centimetres please."); 
Console.WriteLine("My height is: "); 
dHeight = Convert.ToDouble(Console.ReadLine()); 
if (dHeight == xxxxxx?) 
{ 
Console.WriteLine("Sorry incorrect data entered, please enter a numeric value"); 
dHeight = Convert.ToDouble(Console.ReadLine()); 
} 

Что мне нужно вместо этого, как я не знаю, как выразить это /, если это действительно возможно даже.

+0

Обратите внимание на пару других вопросов: вы произносите «пожалуйста» дважды в первый запрос, а также первый запрос - для высоты, но затем второй для веса! –

+0

Спасибо Rufus, это правильно в фактическом файле проекта, я просто испортил его копирование, спасибо за выделение –

ответ

3

Вы можете использовать метод double.TryParse, который вернет false, если ваше значение не может быть проанализировано.

double result; 

if (double.TryParse(yourstirng, out result)) 
{ 
    //your string is double do something with the parsed value 
    result++; 
} 
else 
{ 
    Console.WriteLine("Sorry incorrect data entered, please enter a numeric value"); 
} 
+0

Вам не хватает закрывающего пароля для вашего условия if. – Swoogan

+0

@Swoogan спасибо! Отредактировано код –

0

Convert.ToDoubledouble.Parse использует под капотом, а это значит, что он будет бросать, если неверный формат встречается (то есть. Обычный текст).

Вместо этого используйте double.TryParse, который не бросает, если он выходит из строя (он просто возвращает ложь):

double dHeight = 0; 
if (!double.TryParse(Console.ReadLine(), out dHeight)) 
{ 
    Console.WriteLine("Some Error Message"); 
} 
else 
{ 
    //Parse succeeded! Value is in dHeight. 
} 
+0

Можете ли вы передать Console.ReadLine для TryParse, как это, или вы хотели вызвать метод с Console.ReadLine()? – Swoogan

+0

@Swoogan Nope; Я просто пропустил() при написании. Спасибо, что поймали это! – BradleyDotNET

2

Конечно, вы можете использовать TryParse, а затем, если это не удается, подвигнуть их снова. Примечание. Я также добавил логику повтора здесь, так что пользователь не может действовать до тех пор, пока не войдет в действительный двойной.

В приведенном ниже коде я записываю их вход в переменную (называемую input), а затем используйте double.TryParse, чтобы попытаться преобразовать ее в двойную. Если TryParse преуспеет, то двойной result будет содержать их преобразованную запись. В случае сбоя отображается сообщение об ошибке, и они могут попробовать снова.

Console.Write("Please enter your height in centimeters: "); 
var input = Console.ReadLine(); 
double result; 

while (!double.TryParse(input, out result)) 
{ 
    Console.Write("{0} is not a valid height. Please try again: ", input); 
    input = Console.ReadLine(); 
} 

Console.WriteLine("Thank you. You entered a valid height of: {0}", result); 
Смежные вопросы