我正在尝试编写一个从文本文件中读取的C#程序,并允许您选择要打印的行。
出于某种原因,它只会打印1,3,5等行
如果我将int chooseLine = Convert.ToInt32(input);
的位更改为int chooseLine = (int)Convert.ToInt64(input);
,则它只打印偶数行。(0,2,4,6等)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
class Steve
{
public static int count = 0;
public static String[] steveTalk;
public static void Main()
{
using (StreamReader r = new StreamReader("Steve.txt"))
{
string line;
while ((line = r.ReadLine()) != null)
{
count++;
}
}
using (StreamReader sr = new StreamReader("Steve.txt"))
{
int i = 0;
steveTalk = new String[count];
String line;
while ((line = sr.ReadLine()) != null)
{
steveTalk[i] = line;
Console.WriteLine(steveTalk[i]);
i++;
}
}
while (true)
{
string input = Console.ReadLine();
int chooseLine = Convert.ToInt32(input);
try
{
Console.WriteLine(steveTalk[chooseLine]);
}
catch
{
Console.WriteLine("Error! Not a number or array index out of bounds");
}
Console.ReadLine();
}
}
}
有什么想法吗?
答案 0 :(得分:5)
我想建议使用System.IO.File.ReadAllLines(filename)
方法。
string []lines=System.IO.File.ReadAllLines("Steve.txt");
string input ;
while ((input = Console.ReadLine()) != "end")
{
int chooseLine;
int.TryParse(input,out chooseLine);
if(chooseLine<lines.Length)
{
Console.WriteLine(lines[chooseLine]);
}
}
答案 1 :(得分:2)
您的代码没有此类问题。你可能会遇到的问题是你的循环结束时有一个Console.ReadLine()
,所以如果你输入一个数字,它会显示该行,然后输入另一个数字,该数字将被忽略。您输入的每个其他数字都将被忽略,如果您只是尝试按顺序输入数字,则符合您的描述。
以下是对代码的一些改进。
File.ReadAlLines
读取文件。代码:
using System;
using System.IO;
class Steve {
public static void Main() {
string[] lines = File.ReadAllLines("Steve.txt");
while (true) {
int line;
if (Int32.TryParse(Console.ReadLine(), out line)) {
if (line >= 0 && line < lines.Length) {
Console.WriteLine(lines[chooseLine]);
} else {
Console.WriteLine("Error! Array index out of bounds");
}
} else {
Console.WriteLine("Error! Not a number");
}
}
}
}