我在尝试解析文本文件中的整数时出错
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 循环完成之前,您将 运行 超出要从文件中读取的行数。
当我尝试 "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 循环完成之前,您将 运行 超出要从文件中读取的行数。