为什么c#编译器在任何数字之前都没有读取0?

时间:2011-06-16 06:58:25

标签: c# types

int n;
        int[] ar = new int[50];
        Console.Write("Enter the size of array= ");
        n = int.Parse(Console.ReadLine());
        for (int i = 0; i < n; i++)
        {
            ar[i] = int.Parse(Console.ReadLine());
        }
        for (int i = 0; i < n; i++)
        {
            Console.WriteLine("AR["+i+"]="+ar[i]);
        }
        Console.Read();

enter image description here

在这里你可以看到,当进入09或08时,它将删除它并打印9和8.当在c ++编译器上运行时,它会在不同的索引上打印0和9,为什么编译器两种语言都表现得像这样吗?他们为什么不读一个数字?

5 个答案:

答案 0 :(得分:10)

int.Parse(..)和其他字符串到数值解析函数的行为是去掉任何无关到数值的前导字符(在这种情况下为零)。

如果您希望保持前导零,则将数组的数据类型更改为字符串。

现在您已经发布了一些代码,这里有一些建议(内联评论)

    int n;
    bool validNumber;
    do {
      validNumber = true;
      Console.Write("Enter the size of array:");
      if(!int.TryParse(Console.ReadLine(), out n)) // use TryParse instead of Parse to avoid formatting exceptions
      {
          Console.WriteLine("Not a number, please try again");
          validNumber = false;
      }
    } while(!validNumber);  // re-prompt if an invalid number has been entered

    int[] ar = new int[n];    // declare the array after the size is entered - your code will break if the user enters a number greater than 50

    // change to "string[] ar = new string[n];" if you want to keep the full value entered

    for (int i = 0; i < n; i++)
    {
        bool valid;
        do {
          valid = true;
          int num;
          string value = Console.ReadLine();
          if(int.TryParse(value, out num))  // again - use tryparse.
            ar[i] = num;  // change to "ar[i] = value;" if you're using a string array. 
          else {
            Console.WriteLine("Please enter that again - not a number");
            valid = false;
          }
       } while(!valid);

    }
    for (int i = 0; i < n; i++)
    {
        Console.WriteLine("AR["+i+"]="+ar[i]);
    }
    Console.Read();

答案 1 :(得分:5)

你的数组存储整数,由于01和1具有相同的数字值,我们不区分它们。

如果您需要保留前缀零,则需要将它们保存为字符串。

答案 2 :(得分:4)

整数是整数,而不是字符串。

因此09与9相同,与000000009相同。 它们都在内部由位模式00000101 00000000 00000000 00000000表示(至少在x86上)。

答案 3 :(得分:0)

我认为如果将数组转换为字符串数组然后执行操作会更好。因为当涉及整数09和9没有区别时,数值是重要的。但是当它的字符串不同时,使用字符串数组来执行操作,如果你只想显示它,那么字符串就更好了。如果您想要整数然后将其转换为int,则可以使用API​​。

答案 4 :(得分:-1)

Console.Read * Line *()与cin&gt;&gt;不同。 所以