Предположим, что ваша строка взята из txt-файла. Откройте ее в блокноте ++, а внизу справа вы увидите кодировку файла. Для этого вы можете использовать следующий код, чтобы «прочитать» вашу строку правильно:
Encoding enc = Encoding.GetEncoding("ENCODE_FROM_NOTEPAD++");
byte[] enc_bytes = Encoding.Convert(Encoding.UTF8, enc, Encoding.UTF8.GetBytes(your_str_initial_value));
string msg = enc.GetString(enc_bytes);
EDIT : Я не уверен, что вы можете решить свою проблему с этим решением, но попробуйте для редактирования строки подключения, как показано ниже:
Driver={MySQL ODBC 5.2 ANSI Driver}; //5.2 is your MySQL version
, что вы используете драйвер ansi
Я переписал вашу программу и добавил встроенные комментарии, которые помогут вам понять, что вы сделали неправильно.
Console.Write("Enter Mass1 ");
int Mass1 = int.Parse(Console.ReadLine());
// Console.ReadLine() method returns the `string`
// hence you need to parse it to specific type before assigning it
Console.Write("Enter Lil Numbers ");
int LilNum = int.Parse(Console.ReadLine());
// same here
Console.Write("Enter Mass2 ");
int Mass2 = int.Parse(Console.ReadLine());
// same here
Console.Write("Enter Lil Numbers ");
int LilNum2 = int.Parse(Console.ReadLine());
// same here
Console.Write("Enter Distance between Mass1 & 2 ");
int distance = int.Parse(Console.ReadLine());
// You are using `Mass` which is not present
// `Mass1` was `string` type on which you can not do division
int Mass3 = Mass1 / Mass2;
надеюсь, что это поможет.
Во-первых, вы должны получить сообщение об ошибке при попытке чтения непосредственно из Console
в int
, поскольку функция Console.ReadLine
возвращает значение string
.
Кроме того, вы захотите использовать статические функции TryParse
того типа, в который хотите преобразовать строку.
Например, используя ваш код, мы можем выполнить цикл, пока пользовательский ввод недопустим, например, если они вводят "x"
для числа, используя функцию TryParse
:
string val;
int Mass1, LilNum, Mass2, LilNum2, distance;
do {
Console.Write("Enter Mass1 ");
val = Console.ReadLine();
} while (!int.TryParse(val, out Mass1));
do {
Console.Write("Enter Lil Numbers ");
val = Console.ReadLine();
} while (!int.TryParse(val, out LilNum));
do {
Console.Write("Enter Mass2 ");
val = Console.ReadLine();
} while (!int.TryParse(val, out Mass2));
do {
Console.Write("Enter Lil Numbers ");
val = Console.ReadLine();
} while (!int.TryParse(val, out LilNum2));
do {
Console.Write("Enter Distance between Mass1 & 2 ");
val = Console.ReadLine();
} while (!int.TryParse(val, out distance));
Или вы мог бы поместить этот цикл в функцию, например, так:
public static void ParseUserInput(string msg, out int outval)
{
string val;
do {
Console.Write(msg);
val = Console.ReadLine();
} while (!int.TryParse(val, out outval));
}
public static void Main()
{
int Mass1, LilNum, Mass2, LilNum2, distance;
ParseUserInput("Enter Mass1 ", out Mass1);
ParseUserInput("Enter Lil Numbers ", out LilNum);
ParseUserInput("Enter Mass2 ", out Mass2);
ParseUserInput("Enter Lil Numbers ", out LilNum2);
ParseUserInput("Enter Distance between Mass1 & 2 ", out distance);
Console.WriteLine("Mass 3: {0}", Mass1/Mass2);
}
Этот код использует функцию int.TryParse
, но для всех других примитивных чисел есть также TryParse
типы, такие как long
, double
и т. д. Функция TryParse
вернет false
, если строка является недопустимым числовым значением, и true
, если анализ завершился успешно; если анализ завершится успешно, значение будет помещено в значение out
.
Вы также можете использовать функцию Parse
того типа, который вы конвертируете, например, int.Parse
, однако вам необходимо учитывать, что функция Parse
будет выдавать [ 1121] если синтаксический анализ завершился неудачно, например:
try {
Console.Write("Enter a number: ");
int val = int.Parse(Console.ReadLine());
Console.WriteLine("Number: {0}", val);
} catch (Exception ex) {
Console.WriteLine("There was an error parsing the number: {0}", ex);
}
Просто помните, что вы не можете доверять пользовательскому вводу и должны проверять введенное значение в пределах, допустимых для вашей программы. Например, ваш Mass2
не может быть значением 0
, так как вы делите Mass1
на него для Mass3
(int Mass3 = Mass1/Mass2;
). Кроме того, вы, вероятно, захотите преобразовать значения int
в float
для вашего Mass3
, например, float Mass3 = (float)Mass1/Mass2;
Я надеюсь, что это может помочь.