【问题标题】:How can I display the student's name and his average grade on the console from a text file?如何通过文本文件在控制台上显示学生的姓名和平均成绩?
【发布时间】:2019-07-10 18:02:24
【问题描述】:

我是 C# 编码的新手,我正在学习 .NET FullStack,并且我有一个关于读取/写入文件的问题。我有一个 txt 文件,它由 3 行组成,每行格式如下: 名字,姓氏,出生日期,出生月份,出生年份,国旗,1 年级,[更多年级],国旗,从大学到学生部门的距离(公里)。

数据如下:

---------------------------------------------------------------
| Yossi,Ben David,21,6,1990,FF,80,70,75,80,FF,100             |
---------------------------------------------------------------
| Dany,Avigdor,18,4,1995,FF,70,65,50,FF,30                    |
---------------------------------------------------------------
| Yael,ShemTov,4,9,1997,FF,85,75,90,80,85,FF,100              |
---------------------------------------------------------------

我需要将学生姓名和平均成绩打印到控制台,但出现异常,我不知道为什么。

感谢您的回答。

这是我的代码:

static void Main(string[] args)
{
         try
            {
                string path = @"C:\Users\coral\Desktop\c#\.net course\StudentInfo.txt";
                if (File.Exists(path))
                {

                    using (StreamReader st = File.OpenText(path))
                    {
                        string k;
                        List<int> grade = new List<int>();
                        double avg;

                        while ((k = st.ReadLine()) != null)
                        {
                            string[] words = k.Split(',');
                            foreach (var word in words)
                            {
                                while (word.StartsWith("FF") && word.EndsWith("FF"))
                                //if (word.StartsWith("FF") && word.EndsWith("FF"))
                                {
                                    grade.Add(int.Parse(word));
                                    //intList= int.Parse(num[word]);
                                }

                            }

                        }
                        int[] terms = grade.ToArray();
                        avg = terms.Average();
                        Console.WriteLine(avg);
                        Console.ReadKey();
                    }

                }

            }
            catch (Exception e)
            {
                Console.WriteLine("Error:" + e.ToString());
                Console.ReadKey();
            }
}

错误信息是:

Error:System.FormatException: System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) in System.Int32.Parse(String s) in FileExercise.Program.Main(String[] args) in C:\Users\coral\source\repos\FileExercise\FileExercise\Program.cs: 111 line

【问题讨论】:

  • 能否请您发布一些示例数据以及错误消息和堆栈跟踪。
  • 错误消息是:Error:System.FormatException: System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) System.Number.ParseInt32(String s, NumberStyles样式,NumberFormatInfo info) in System.Int32.Parse(String s) in FileExercise.Program.Main(String[] args) in C:\Users\coral\source\repos\FileExercise\FileExercise\Program.cs: 111 line
  • 部分数据:Yossi,Ben David,21,6,1990,FF,80,70,75,80,FF,100 Dany,Avigdor,18,4,1995,FF,70,65 ,50,FF,30 Yael,ShemTov,4,9,1997,FF,85,75,90,80,85,FF,100

标签: c# file


【解决方案1】:

你的问题在这里:

while (word.StartsWith("FF") && word.EndsWith("FF"))
                            {
                                grade.Add(int.Parse(word));
                            }

第一行确保wordFF 开头和结尾,但随后调用int.Parse,如果文本不是数字,则会引发错误。

你可以试试这样的:

int temp;
if (int.TryParse(word, out temp)) grade.Add(temp);

这将检查word是否可以被解析。

【讨论】:

    【解决方案2】:

    问题是成绩也被,分开。 所以你只需要解析第一个FF之后和第二个FF之前的成绩

    //while ((k = st.ReadLine()) != null)
    bool started = false;
    foreach(var word in words){
        if(started && word == "FF")
        {
            break;
        }
        if(started)
        {
            grade.Add(int.Parse(word));
        }
        if(word == "FF")
        {
            started = true;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多