创建控制台应用程序以从文件中读取和显示数字

Creating Console App to Read and Display Numbers from a File

我的程序现在的问题是它没有正确显示数据文件中的值。它以排序的方式显示全 0。它没有以递增的方式传递实际数字。

====================================

需要读入并放在数组中的25个数字是:(只用了4个数字以保持post更短。

10.5
20.1 
33.0 
45.9

=================================

到目前为止我的代码如下:我认为我的问题出在我的 DisplayArray() 方法中。它像这样写出全 0:

\Users\Joe\Documents\Visual Studio 2013\Projects\CIS110\Program11\prog11Dat.
was opened
0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
0    0    Press any key to continue . . .

=======

class Program11
    {
        const string INPUT_FILE_NAME = "\Users\Joe\Documents\Visual Studio 2013\Projects\CIS110\Program11\prog11Dat.Txt";

        static double[] numArray = new double[25];
        static StreamReader fileIn;

        static void ReadFile()
        {
            if (File.Exists(INPUT_FILE_NAME))
            {
                fileIn = (File.OpenText(INPUT_FILE_NAME));
                Console.WriteLine("{0} was opened",INPUT_FILE_NAME);
            }
            else
            {
                Console.WriteLine("Error: {0} does not exist\n",INPUT_FILE_NAME);
                ConsoleApp.Exit();
            }            
        }


        static void DisplayArray()
        {

            for (int i = 0; i < numArray.Length; i++)
                Console.Write("{0}    ", numArray[i]);


        }

        static void SortValuesAscending()
        {
            uint i, j, k;
            double tempValue;

            for (i=1; i<=(numArray.Length); i++)
            {
                k = 1;
                for (j = (i + 1 ); j <= numArray.Length -1; j++)
                    if (numArray[j] < numArray[k])
                        k = j;
                if (k>i)
                {
                    tempValue = numArray[k];
                    numArray[k] = numArray[i];
                    numArray[i] = tempValue;
                }
            }
        }

        static void Main(string[] args)
        {

            ReadFile();
            DisplayArray();
            SortValuesAscending();
            DisplayArray();


        }

    }
}

您正在盲目地将文件中的行读取到一个固定长度的 25 数组中。使用列表或根据行数初始化您的数组。你也没有检查空行。如果文件末尾有一个杂散的 CRLF,那么 File.Read 将成功读取一个空行。

另外 'j = (i + 1) ... numArray[j]' 当 i == numArray.Length - 1 时会超出数组。

这是一个单行方法,它将获取一个文件名,读取数字(每行一个),然后按排序顺序打印出来:

    public void PrintNumbersInFile(string fileName)
    {
        File.ReadAllLines(fileName) // reads the lines in the file into a string[]
            .Select(l => double.Parse(l.Trim())) // for each item in the string[], parse the string into a double after trimming any spaces around it
            .OrderBy(n => n) // sort by the value of the double
            .ToList() // put the sorted values in a list
            .ForEach(n => Console.Write("{0:F1}    ", n)); // and for each item in the list, write out its value ({0:F1} to show one decimal point)
    }

请注意,这假定文件存在且格式有效,否则它将抛出...

并使用您在问题中的示例输入(将其放入文件中),这是输出:

10.5    20.1    33.0    45.9    Press any key to continue . . .

它到达那里,你的问题是你的 ReadFile 目前没有进行任何阅读;也不会添加到双精度数组

static void ReadFile()
{

    List<string> lines = new List<string>();
    if (File.Exists(INPUT_FILE_NAME))
    {
        using(var sr = new StreamReader(INPUT_FILE_NAME))
        {
            string line;
            while((line = sr.ReadLine()) != null)
            {
                lines.Add(line);
            }
        }
    }
    else
    {
        Console.WriteLine("Error: {0} does not exist\n",INPUT_FILE_NAME);
        ConsoleApp.Exit();
    }

    // you now have a list of numbers as strings here (lines)
    // You need to parse and assign these to your numArray
    // Hint: for loop and Parse/TryParse
}

我故意省略了如何进行解析以帮助您学习:)

第二个提示,在您的 DisplayArray 中,考虑使用 PadRight