我在尝试解析文本文件中的整数时出错

I get an error with trying to parse the integer from the textfile

当我尝试 "login" 时遇到错误。这是一个学校项目,我知道它很简单,我只需要它正常运行,我们将不胜感激。尝试忽略明显低效的代码。

   class UserVariables
        {
            public static int avatarC;
            public static int colourC;
            public static string userNameC;
            public static string passWordC;
            public static int highScoreC;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                bool success = false;

                string UsernameTXT = "userName.txt";
                string PasswordTXT = "userPass.txt";
                string ColourTXT = "userColour.txt";
                string AvatarTXT = "userAvatar.txt";
                string ScoreTXT = "userScore.txt";

                using (StreamReader user_Login = new StreamReader(UsernameTXT))
                {
                    using (StreamReader pass_Login = new StreamReader(PasswordTXT))
                    {
                        using (StreamReader colour_Login = new StreamReader(ColourTXT))
                        {
                            using (StreamReader avatar_Login = new StreamReader(AvatarTXT))
                            {
                                using (StreamReader score_login = new StreamReader(ScoreTXT))
                                {
                                    var lineCount = File.ReadLines(UsernameTXT).Count();
                                    string userRead;
                                    string passRead;
                                    string colourRead;
                                    string avatarRead;
                                    string scoreRead;

                                    for (int a = 0; a < lineCount; a++)
                                    {
                                        userRead = user_Login.ReadLine();
                                        passRead = pass_Login.ReadLine();
                                        colourRead = user_Login.ReadLine();
                                        avatarRead = pass_Login.ReadLine();
                                        scoreRead = user_Login.ReadLine();

                                        if ((textBox1.Text == userRead) && (textBox2.Text == passRead))
                                        {
                                            UserVariables.userNameC = textBox1.Text;
                                            UserVariables.passWordC = textBox2.Text;

                                            UserVariables.colourC = int.Parse(colourRead);
                                            // Theres a problem with this line.

                                            UserVariables.avatarC = int.Parse(avatarRead);
                                            UserVariables.highScoreC = int.Parse(scoreRead);
                                            MessageBox.Show("Login successful!",
                                                "Success");

                                            success = true;

                                            new Menus().Show();

                                            this.Hide();

                                            MessageBox.Show("Hi, " + UserVariables.userNameC + "!");
                                            break;
                                        }
                                    }

                                    if (success == false)
                                    {
                                        label1.Show();

                                        MessageBox.Show("Login was unsuccessful.",
                                            "Error");
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

错误是"Input string was not in a correct format",它告诉我colourRead 至少有一个值不是整数值。 int.Parse 忽略空格,所以这不是格式问题。它不能是简单的整数值,并且必须包含另一个字符,例如“2a”、“2.0”、“1,000”等。

要准确计算出哪个值,您可以创建一个断点或观察并开始调试,或者您可以使用 int.TryParse

试试这个

if(!int.TryParse(colourRead, out UserVariables.colourC))
{
    MessageBox.Show(colourRead);
}
// Theres a problem with this line.

它可能会弹出一个 window 告诉您它试图将什么值转换为 int。


此外,我预见到您阅读文件的方式存在问题。您可以通过这样做获得 userTXT 中的行数:

 var lineCount = File.ReadLines(UsernameTXT).Count();

这将读取整个文件内容,并计算存在多少行。这不是一个很好的方法,但只要文件不太长,它应该可以正常工作。

然后您将单步执行此文件中的每一行,但 for 循环的每次迭代都会读取 3 行

userRead = user_Login.ReadLine();
...
colourRead = user_Login.ReadLine();
...
scoreRead = user_Login.ReadLine();

在 for 循环完成之前,您将 运行 超出要从文件中读取的行数。