【问题标题】:C# Loading Data From Text file integersC#从文本文件整数加载数据
【发布时间】:2026-02-06 12:30:01
【问题描述】:

我在 c# 控制台中的基于文本的 RPG 有一个小问题。

我已经做了一个保存的方法,但是当我想加载它时,它给了我一个错误..

这是我的加载代码:

(字符串没有给出错误,但问题从Level到Agility开始)

代码:

public static void LoadData ()
{
        // create reader & open file
        TextReader tr = new StreamReader("SavedGame.txt");

        // read lines of text
        string xCoordString = tr.ReadLine();
        string yCoordInt= tr.ReadLine();

        //Convert the strings to int
        Name = Convert.ToString(xCoordString);
        PlayerType = Convert.ToString (xCoordString);
        Level = Convert.ToString(xCoordString);
        HP = Convert.ToInt32(yCoordInt);
        Strenght = Convert.ToInt32(yCoordInt);
        Intelligence = Convert.ToInt32(yCoordInt);
        Agility = Convert.ToInt32(yCoordInt);
        // close the stream
        tr.Close();
}

【问题讨论】:

  • 错误信息是什么?您可能需要单步执行您的代码并查看您尝试转换的每个变量的值
  • Level = Convert.ToInt32 btw 而不是 ToString
  • 并且错误是:System.FormatException:输入字符串在 System.Int32.Parse (System.String s) [0x00000] in :0 在 System.Convert .ToInt32 (System.String value) [0x00000] in :0 at practiceCSHARP.MainClass.LoadData () [0x0002f] in /home/stefano/Projects/practiceCSHARP/practiceCSHARP/Main.cs:396 at practiceCSHARP.MainClass .Main (System.String[] args) [0x002eb] 在 /home/stefano/Projects/practiceCSHARP/practiceCSHARP/Main.cs:109
  • 你能展示一下你的文本文件是什么样子的吗?
  • level里面放的是int数3

标签: c# string file load int


【解决方案1】:

读入变量的任何内容都不能转换为 int。您可能必须去除换行符/回车符,或者简单的数据不是数字。在尝试转换之前,您应该对其进行测试和/或清理。

【讨论】:

  • 嗯,您可以更改代码以正常工作吗?我只是一个初学者哈哈哈哈哈
【解决方案2】:

我不知道你在做什么

           string xCoordString = tr.ReadLine();
            //Convert the strings to int
           Name = Convert.ToString(xCoordString);

为什么你把字符串转换成字符串???

所以你读了 string ,那么你应该拆分它

           string[] s = xCoordString .Split(' ');

然后

           var firstVariable=s[0];
           var secondVariable=s[1];

等等。这应该可以帮助你 C# Splitting Strings?

还有一个:使用

        int.Parse(string value)  

希望我的回答对你有所帮助。祝你好运!

【讨论】:

  • 这不是答案。这更像是一种评论。
【解决方案3】:

您可能希望使用TryParse(String, Int32) 来检查解析是否成功,如果解析不成功,则执行一些操作(如设置默认值或通知用户)。

你可以清理输入字符串然后解析它:

private static int ParseNumber(string input)
{
             string cleanedInput = input.Where(c => char.IsDigit(c)).ToString();
             int result;
             if (!Int32.TryParse(cleanedInput, out result))
             {
                Console.WriteLine("An error occured..");
             }
     return result;

}

只需使用Agility = ParseNumber(input)

【讨论】:

    【解决方案4】:

    您没有正确解析保存文件。如果这是您保存文件的格式:

    Stefano 
    Knight 
    1 
    100 
    3 
    3 
    3
    

    那么您将需要迭代地读取每一行并将读取的值解析到您的变量中,如下所示:

    string line = string.Empty;
    
    //Convert the strings to int
    line = tr.ReadLine();
    Name = line;
    line = tr.ReadLine();
    PlayerType = line;
    line = tr.ReadLine();
    Level = Convert.ToInt32(line);
    line = tr.ReadLine();
    HP = Convert.ToInt32(line);
    line = tr.ReadLine();
    Strenght = Convert.ToInt32(line);
    line = tr.ReadLine();
    Intelligence = Convert.ToInt32(line);
    line = tr.ReadLine();
    Agility = Convert.ToInt32(line);
    

    当然有更好的方法来管理你的保存文件数据,但这应该会告诉你为什么你的解析不起作用。

    【讨论】:

    • 工作!!@#$%*(&$#@!@#$%
    【解决方案5】:

    您可以像这样遍历这些行,但是您需要确定它是哪个属性并相应地处理它。

     TextReader tr = new StreamReader("SavedGame.txt");
    
    
     string charInfo;
     while ((charInfo = tr.ReadLine()) != null)
     {
         //parse the line and put into appropriate variable.
     }
    

    【讨论】: