当用户输入' day' if语句应该运行并显示文本文件中的所有数据,但由于某种原因,它只打印第一行' Monday'但它确实应该打印出来:
'星期一 星期五 星期四 星期三 星期二 星期一 星期五 星期四 星期三 星期二 星期一 周五'
我该如何解决这个问题?
(另外,如果用户输入,例如,' day' else语句仍会写入如何修复?)
static void Main(string[] args)
{
//int ctr = 0;
string[] dayData = File.ReadAllLines("Day.txt");
string[] dateData = File.ReadAllLines("Date.txt");
string[] sh1CloseData = File.ReadAllLines("SH1_Close.txt");
string[] sh1DifferenceData = File.ReadAllLines("SH1_Diff.txt");
string[] sh1OpenData = File.ReadAllLines("SH1_Open.txt");
string[] sh1VolumeData = File.ReadAllLines("SH1_Volume.txt");
Console.WriteLine("Which array would you like to view?");
string input = Console.ReadLine();
if (input.ToLower() == "day")
Console.Write("\n{0}", dayData);
if (input.ToLower() == "date")
Console.Write("\n{0}", dateData);
if (input.ToLower() == "close")
Console.Write("\n{0}", sh1CloseData);
if (input.ToLower() == "difference")
Console.Write("\n{0}", sh1DifferenceData);
if (input.ToLower() == "open")
Console.Write("\n{0}", sh1OpenData);
if (input.ToLower() == "volume")
Console.Write("\n{0}", sh1VolumeData);
else
Console.Write("\nSorry, you entered an invalid term, please enter: day, date, close, difference, open or volume.");
Console.Read();
}
答案 0 :(得分:1)
对于文件中找到的每一行,数组中将有一个条目。通过将整个数组传递给Console.Write
方法,您正在做一些奇怪的事情,其第二个参数被解释为您的字符串格式参数。由于您只有一个格式索引(“{0}”),因此只能看到数组中的第一个项目。
要查看 all 以空格分隔的条目,请将每个条件更改为:
if (input.ToLower() == "day")
Console.WriteLine(string.Join(' ', dayData));
我会进一步改进您的应用程序,只根据输入的项目加载所需的文件。您可以减少文件I / O并删除不必要的CPU /内存使用量。通过这样做可以更容易维护:
static void Main(string[] args)
{
// map expected inputs to their corresponding files
var inputMap = new Dictionary<string, string>
{
{ "day", "Day.txt" },
{ "date", "Date.txt" },
{ "close", "SH1_Close.txt" },
...
};
Console.WriteLine("Which array would you like to view?");
string input = Console.ReadLine();
// Make sure there was input and it's in the map; get it if it is
string filePath;
if (string.IsNullOrEmpty(input) || !inputMap.TryGetValue(input.ToLower(), out filePath))
{
Console.WriteLine("Sorry, you entered an invalid term, please enter: day, date, close, difference, open or volume.");
return;
}
// Make sure the file exists
if (File.Exists(filePath))
{
// read all lines from the file
string[] fileLines = File.ReadAllLines(filePath);
// join them with a space and output to console
Console.WriteLine(string.Join(' ', fileLines));
}
else
{
Console.WriteLine("Sorry, the file doesn't exist.");
}
Console.Read();
}
答案 1 :(得分:0)
上述答案回答了你问题的第一部分,但是关于你的第二个问题
此外,如果用户输入了例如&#39; day&#39; else语句仍然写道如何解决这个问题?
你有一堆单行if语句,然后最后一个if语句也有一个else。因此编写代码的方式,除非用户键入&#34; volume&#34;,否则您将始终打印else。如果您只想在没有输入任何处理输入的情况下打印其他内容,则需要执行以下操作:
if (input.ToLower() == "day")
Console.Write("\n{0}", dayData);
else if (input.ToLower() == "date")
Console.Write("\n{0}", dateData);
else if (input.ToLower() == "close")
Console.Write("\n{0}", sh1CloseData);
else if (input.ToLower() == "difference")
Console.Write("\n{0}", sh1DifferenceData);
else if (input.ToLower() == "open")
Console.Write("\n{0}", sh1OpenData);
else if (input.ToLower() == "volume")
Console.Write("\n{0}", sh1VolumeData);
else
Console.Write("\nSorry, you entered an invalid term, please enter: day, date, close, difference, open or volume.");