在我的C#代码

时间:2017-07-11 06:25:26

标签: c# .net

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 

3 个答案:

答案 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

希望它对你有所帮助。