【发布时间】:2015-11-09 19:49:37
【问题描述】:
我正在尝试制作一个程序来读取文本文件并从中返回数据(在本例中为货币)。文本文件以这种方式列出了所有货币:
USD US Dollars (USA) 1,077600 1,058100 1,097100
JPY Yen (Japan) 133,080000 130,480000 135,680000
... etc.
所以当用户输入货币代码(比如日元)时,程序会打印:
JPY Yen (Japan) 133,080000 130,480000 135,680000
然后,程序将循环并不断询问货币,直到用户输入一个空字符串。
这就是我现在拥有的:
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.IO;
public class Currencies
{
public static void Main()
{
string line;
System.IO.StreamReader currencies = new System.IO.StreamReader("currencies.txt");
Console.Write("Enter currency code >");
string currency = Console.ReadLine();
while ((line = currencies.ReadLine()) != null)
{
if (line.Contains(currency))
{
Console.WriteLine(line);
}
}
Console.ReadLine();
}
}
现在,它返回正确的行,但循环在第一次输入后中断,如果输入一个空字符串,它会返回文本文件的每一行。
有什么想法可以继续制作吗?另外,我应该使用 ReadAllLines 而不是 StreamReader 吗?
【问题讨论】:
-
您只要求提供一次货币代码,因此程序只会运行一次。用户无法输入另一个,因为他们从来没有机会输入。您需要在 while 循环中提示货币代码,并使用特定值来结束循环(例如,-1)。
-
啊,对,我怎么没注意到。我将尝试将 Console.Write 粘贴在 while 循环中。
-
你在哪里循环基于用户输入而不是货币文件?这就是我认为你的错误所在。
-
另外,如果搜索的值为空字符串,
String.Contains将返回 true。请参阅返回值下的msdn.microsoft.com/en-us/library/dy85x1sa(v=vs.110).aspx。 -
您需要两个单独的 while 循环。提示用户输入的外部循环(直到用户输入将退出循环的值)和内部 while 循环来遍历每个输入的文件。
标签: c# file text streamreader