当我尝试运行我的代码时,我收到错误:
输入字符串的格式不正确。
我试图在文本文件的每一行中找到最大的int,然后将它们全部添加。
我确信此文件中没有字母,所有内容都以空格分隔。
这是我的代码:
int counter = 0;
string line;
List<int> col = new List<int>();
// Read the file and display it line by line.
System.IO.StreamReader file =
new System.IO.StreamReader(label3.Text);
while ((line = file.ReadLine()) != null)
{
int[] storage = new int[10000];
Console.WriteLine(line);
counter++;
string s = line;
string[] words = s.Split(' ');
for (int i = 0; i < words.Length; i++)
{
storage[i] = Convert.ToInt32(words[i]);
}
int large = storage.Max();
col.Add(large);
Console.WriteLine(" ");
foreach (int iii in col)
{
Console.WriteLine(iii);
}
int total = col.Sum();
Console.WriteLine(total);
}
file.Close();
// Suspend the screen.
Console.ReadLine();
答案 0 :(得分:2)
目标字符串可能无法存储在32位整数中。您可以尝试解析为ulong
类型。请查看Integral Types Table和Floating-Point Types Table。
而不是Convert.ToInt32()
,请尝试int.TryParse()
。它将返回一个bool值,告诉你操作是否成功,并且它有一个out参数,它将放置解析操作的结果。如果您确定需要,TryParse操作也可用于其他数字类型。
E.g。
int val;
string strVal = "1000";
if (int.TryParse(strVal, out val))
{
// do something with val
}
else
{
// report error or skip
}
答案 1 :(得分:0)
我做了一个快速测试,你可能会在行
中得到错误 storage[i] = Convert.ToInt32(words[i]);
如果是这样,请确保您要转换的内容是整数,而不是空字符串,例如。
答案 2 :(得分:0)
我相信您的代码中可能导致此错误的行是
Convert.ToInt32(words[i]);
现在,当你在visual studio中以调试模式(你可能是)运行这个应用程序时,你有办法检查异常发生时程序中发生了什么。
在屏幕的最底部会有一些标签。这些选项卡包括您的错误列表等。我喜欢使用的是“本地人”和“观看”。您可以使用“本地”选项卡。
单击“局部”选项卡时,应该会看到程序中所有局部变量的树结构。如果展开单词变量,则应该看到数组的所有单个成员。你还应该能够看到变量我检查你的单词数组的第i个成员,并确保它是一个整数,而不是其他东西。
答案 3 :(得分:0)
您要么转换为超出规模,要么尝试解析回车'/ r'
确保您正在修改输入。
我的解决方案:
static void Main(string[] args)
{
int linecount = 100;
string path = @"C:\test\test.txt";
Random rand = new Random();
//Create File
StreamWriter writer = new StreamWriter(path, false);
for (int i = 0; i < linecount; i++)
{
for (int j = 0; j < rand.Next(10, 15); j++)
{
writer.Write(rand.Next() + " ");
}
writer.WriteLine("");
}
writer.Close();
//Sum File
long sum = Enumerable.Sum<string>(
(new StreamReader(path)).ReadToEnd().Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries),
l => Enumerable.Max(
l.Split(' '),
i => String.IsNullOrEmpty(i.Trim()) ? 0 : long.Parse(i.Trim())
)
);
}