C# VS WPF程序在检查if语句时不断崩溃

C# VS WPF程序在检查if语句时不断崩溃,c#,wpf,visual-studio-2012,crash,C#,Wpf,Visual Studio 2012,Crash,我刚刚完成了VisualStudio2012制作的一个关于简单学生评分系统的WPF程序 一切正常,没有显示错误或无效语句(红线) 还有一个提交按钮,但每当我第二次按下它,程序就会崩溃。 我检查了我的代码好几次,都找不到解决方案。所以可能会有麻烦:S 该程序的工作原理如下: 用户必须输入多个学生才能输入分数。-->按OK,当用户输入完等级-->按submit时,显示字段列表。这些值都输入到两个数组中,一个用于名称,另一个用于将转换为字母的等级。 将为第二名学生清理场地,以此类推,直到学生人数达到。

我刚刚完成了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
,但此时您无法访问s
nbofstudents[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将值保存到文件中,然后检索它。当学生人数增加时,它仍然崩溃到达。