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

时间:2015-04-28 06:53:24

标签: c# arrays console-application

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

  

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

需要读入并放入数组的25个数字是:(仅使用4个数字来缩短帖子。

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();


        }

    }
}

3 个答案:

答案 0 :(得分: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 . . .

答案 1 :(得分:0)

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

另外&#39; j =(i + 1)... numArray [j]&#39;当i == numArray.Length - 1时,它将超过数组。

答案 2 :(得分:0)

它到达那里,你的问题是你的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

进行调查