C# VS WPF程序在检查if语句时不断崩溃
我刚刚完成了VisualStudio2012制作的一个关于简单学生评分系统的WPF程序 一切正常,没有显示错误或无效语句(红线) 还有一个提交按钮,但每当我第二次按下它,程序就会崩溃。 我检查了我的代码好几次,都找不到解决方案。所以可能会有麻烦:S 该程序的工作原理如下: 用户必须输入多个学生才能输入分数。-->按OK,当用户输入完等级-->按submit时,显示字段列表。这些值都输入到两个数组中,一个用于名称,另一个用于将转换为字母的等级。 将为第二名学生清理场地,以此类推,直到学生人数达到。程序应提供一个包含姓名及其字母等级的消息框C# VS WPF程序在检查if语句时不断崩溃,c#,wpf,visual-studio-2012,crash,C#,Wpf,Visual Studio 2012,Crash,我刚刚完成了VisualStudio2012制作的一个关于简单学生评分系统的WPF程序 一切正常,没有显示错误或无效语句(红线) 还有一个提交按钮,但每当我第二次按下它,程序就会崩溃。 我检查了我的代码好几次,都找不到解决方案。所以可能会有麻烦:S 该程序的工作原理如下: 用户必须输入多个学生才能输入分数。-->按OK,当用户输入完等级-->按submit时,显示字段列表。这些值都输入到两个数组中,一个用于名称,另一个用于将转换为字母的等级。 将为第二名学生清理场地,以此类推,直到学生人数达到。
using System.IO;
namespace Grading_System_Project_3
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public static int nbofstudents;
public double m1, m2, p1, p2, f;
public int i = 0;
public int l;
public double avg;
public string name;
public char fg;
public char[] gr;
public string[] names;
public MainWindow()
{
InitializeComponent();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if (Convert.ToInt32(textBox1.Text) <= 0)
{
MessageBox.Show("Please Enter a valid students number");
}
else
{
nbofstudents = Convert.ToInt32(textBox1.Text);
StreamWriter SW = File.CreateText(@"C:\grades.txt");
SW.Close();
textBox2.Visibility = System.Windows.Visibility.Visible;
textBox3.Visibility = System.Windows.Visibility.Visible;
textBox4.Visibility = System.Windows.Visibility.Visible;
textBox5.Visibility = System.Windows.Visibility.Visible;
textBox6.Visibility = System.Windows.Visibility.Visible;
textBox7.Visibility = System.Windows.Visibility.Visible;
label2.Visibility = System.Windows.Visibility.Visible;
label3.Visibility = System.Windows.Visibility.Visible;
label4.Visibility = System.Windows.Visibility.Visible;
label5.Visibility = System.Windows.Visibility.Visible;
label6.Visibility = System.Windows.Visibility.Visible;
label7.Visibility = System.Windows.Visibility.Visible;
}
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
StreamWriter sw2 = new StreamWriter(@"C:\grades.txt");
if (i < nbofstudents)
{
name = textBox2.Text;
m1 = Convert.ToInt32(textBox3.Text);
m2 = Convert.ToInt32(textBox4.Text);
p1 = Convert.ToInt32(textBox5.Text);
p2 = Convert.ToInt32(textBox6.Text);
f = Convert.ToInt32(textBox7.Text);
avg = (m1 + m2 + p1 + p2 + f) / 5;
if (avg >= 0 && avg <= 59)
{
fg = 'F';
}
else if (avg >= 60 && avg <= 69)
{
fg = 'D';
}
else if (avg >= 70 && avg <= 79)
{
fg = 'C';
}
else if (avg >= 80 && avg <= 89)
{
fg = 'B';
}
else if (avg >= 90 && avg <= 100)
{
fg = 'A';
}
string temp = Convert.ToString(fg);
try
{
sw2.WriteLine(name + "\t" + temp);
sw2.WriteLine();
sw2.Close();
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
i++;
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
textBox5.Clear();
textBox6.Clear();
textBox7.Clear();
}
else
{
try
{
StreamReader rf = new StreamReader(@"C:\grades.txt");
string s = "";
while ((s = rf.ReadLine()) != null)
{
MessageBox.Show(rf.ReadLine());
}
rf.Close();
}
catch (IOException ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
}
使用System.IO;
命名空间分级系统项目3
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
公立学校学生人数;
公共双m1、m2、p1、p2、f;
公共整数i=0;
公共国际;
公共双平均值;
公共字符串名称;
公共字符fg;
公共字符[]gr;
公共字符串[]名称;
公共主窗口()
{
初始化组件();
}
私有无效按钮\u单击\u 1(对象发送者,路由目标)
{
如果(Convert.ToInt32(textBox1.Text)=0&&avg=60&&avg=70&&avg=80&&avg=90&&avg您可以发布有关崩溃的异常信息吗?在它的表面上,我可以看到您在哪里检查if(I
,然后将其递增i++
,然后开始访问gr
和names
数组的元素。这可能是一个问题,因为如果nbofstudents
为10,那么当i
为9时,它仍然会通过如果
条件,将自身递增为10
,但此时您无法访问snbofstudents[10]
(您可以访问的最高值是9)。您还跳过了输入0
元素。在分配gr[i]=fg
和names[i]=name
之后,您应该将i++
增量移动到。作为旁注,您正在尝试做什么(数据输入)非常适合MVVM和数据绑定,如果使用此技术,从长远来看可以节省大量工作。这是一个很好的入门教程,它基于Silverlight,但同样的原则适用于WPF。感谢您的回复。我无法获得异常信息,但从调试窗口中,我得到了“System.FormatException”“m1=Convert.ToDouble(textBox3.Text);”表示无法将字符串转换为日期格式。//类似的内容参见Convert.ToDouble
(请参阅)告诉它可以抛出哪些异常。5次调用Convert.ToDouble
都没有检查提供的文本是否为有效数字,也没有任何catch
代码处理无效数字。编辑了我的帖子,现在我使用streamwriter将值保存到文件中,然后检索它。当学生人数增加时,它仍然崩溃到达。