1.i必须获取输入并将其存储到字典中,然后再获取一些输入并检查它是否在字典中。
2.我试过这个,但是给出了错误(输入字符串的格式不正确)
3.它在编译时没有给出任何错误,但它在运行时给出了错误。问题是什么。
我的意见是: -
3
山姆99912222
汤姆11122222
哈里12299933
SAM
爱德华
哈利
5.代替Read()。我也试过ReadLine(),但问题是一样的。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution
{
static void Main()
{
int n = Convert.ToInt32(Console.Read());
Dictionary<string, int> phbook = new Dictionary<string, int>();
for (int i = 0; i < n; i++)
{
string name = Console.Read().ToString();
int phonno = Convert.ToInt32(Console.ReadLine());
phbook.Add(name, phonno);
}
foreach (var keypairs in phbook)
{
string namet = Console.Read().ToString();
if (phbook.ContainsKey(namet))
{
Console.Write("{0}={1}", namet, phbook[namet]);
}
else
{
Console.Write("Not found");
}
}
}
}
完整的错误是
Unhandled Exception:
System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber (System.String str, System.Globalization.NumberStyles options, System.Number+NumberBuffer& number, System.Globalization.NumberFormatInfo info, System.Boolean parseDecimal) [0x00057] in <a07d6bf484a54da2861691df910339b1>:0
at System.Number.ParseInt32 (System.String s, System.Globalization.NumberStyles style, System.Globalization.NumberFormatInfo info) [0x00015] in <a07d6bf484a54da2861691df910339b1>:0
at System.Int32.Parse (System.String s, System.IFormatProvider provider) [0x00008] in <a07d6bf484a54da2861691df910339b1>:0
at System.Convert.ToInt32 (System.String value) [0x0000b] in <a07d6bf484a54da2861691df910339b1>:0
at Solution.Main () [0x00034] in solution.cs:15
[ERROR] FATAL UNHANDLED EXCEPTION: System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber (System.String str, System.Globalization.NumberStyles options, System.Number+NumberBuffer& number, System.Globalization.NumberFormatInfo info, System.Boolean parseDecimal) [0x00057] in <a07d6bf484a54da2861691df910339b1>:0
at System.Number.ParseInt32 (System.String s, System.Globalization.NumberStyles style, System.Globalization.NumberFormatInfo info) [0x00015] in <a07d6bf484a54da2861691df910339b1>:0
at System.Int32.Parse (System.String s, System.IFormatProvider provider) [0x00008] in <a07d6bf484a54da2861691df910339b1>:0
at System.Convert.ToInt32 (System.String value) [0x0000b] in <a07d6bf484a54da2861691df910339b1>:0
at Solution.Main () [0x00034] in solution.cs:15
答案 0 :(得分:1)
好吧,Console.Read()
返回单个字符,这就是
string name = Console.Read().ToString();
看起来非常可疑;另一个问题是并非每个字符串都是正确的整数值("bla-bla-bla"
是一个例子):
int phonno = Convert.ToInt32(Console.ReadLine());
让我们重写片段:
// We want name (string), say "Test" not just character 'T'
string name = Console.ReadLine();
int phonno = 0;
// Ask for a number until a correct one is provided
while (!int.TryParse(Console.ReadLine(), out phonno)) {
Console.WriteLine("Incorrect number, please put the number again.");
}
与string namet = Console.Read().ToString();
相同的修正案应该是
// We want name (string), say "Test" not just character 'T'
string namet = Console.ReadLine();
编辑:发生了什么
你放sam 99912222
并执行
string name = Console.Read().ToString();
int phonno = Convert.ToInt32(Console.ReadLine());
Console.Read()
只读取第一个字符 's'
(不是"sam"
)而另一部分"am"
由Convert.ToInt32(Console.ReadLine());
读取。当然"am"
不是有效整数,你有例外。
答案 1 :(得分:0)
点击Enter后可能会插入额外的空格或字符。所以你应该删除那个空格或额外的字符,如
int phonno = Convert.ToInt32(Console.ReadLine().Trim());
尝试一下它应该有用。
由于
答案 2 :(得分:0)
您必须使用Console.ReadLine()
int n = Convert.ToInt32(Console.ReadLine());
或者您可以使用int.TryParse
,如下所示:
Int32 n=0;
int.TryParse(Console.ReadLine(), out n);
它将在内部处理异常,如果在转换中发现任何异常,它将默认返回值0。
您可以详细了解int.TryParse
here:
希望它对你有所帮助。