C# 为什么c编译器不在任何数字之前读取0?

C# 为什么c编译器不在任何数字之前读取0?,c#,types,C#,Types,正如这里你可以看到,当我进入09或08它将删除它,并打印9和8。当在C++编译器上运行相同的代码时,它将0和9打印在不同的索引上,为什么两种语言的编译器都是这样的?为什么他们不读取一个数字?int.Parse的行为。。其他字符串到数字的解析函数是去掉与数值无关的任何前导字符零 如果希望保留前导零,请将数组的数据类型更改为字符串 现在您已经发布了一些代码,下面是一些建议和评论 int n; int[] ar = new int[50]; Console.Write(

正如这里你可以看到,当我进入09或08它将删除它,并打印9和8。当在C++编译器上运行相同的代码时,它将0和9打印在不同的索引上,为什么两种语言的编译器都是这样的?为什么他们不读取一个数字?

int.Parse的行为。。其他字符串到数字的解析函数是去掉与数值无关的任何前导字符零

如果希望保留前导零,请将数组的数据类型更改为字符串

现在您已经发布了一些代码,下面是一些建议和评论

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();

您的数组正在存储整数,因为01和1具有相同的数值,所以我们不区分它们


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

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

所以09和9一样,和00000009一样。
至少在x86上,它们都在内部由位模式00000101 00000000 00000000表示。

我认为最好将数组转换为字符串数组,然后执行该操作。因为当整数09和9没有区别时,数值才是最重要的。但是当它是一个字符串时,它就不同了,所以使用字符串数组来进行操作,如果你必须只想显示它,那么字符串无论如何都是更好的。如果你想要整数,然后把它转换成整数,有API可用。

控制台。Read*Line*不同于cin>>。
因此,当您没有显示任何代码时,很难知道发生了什么。。。当在执行时输入数字时,很难看出编译器与此有什么关系。数组的数据类型是什么?如何读取命令行中的内容?看到一些代码会很有帮助。我编辑了这个问题并给出了我的代码示例……你确实说分析器播种它忽略了前0个,因为没有整数开始,0.先生,我假设C编译器的值和01和1一样,但是C++为什么在不同的索引上打印它呢?检查我的这个问题,谢谢。我对C++的标准行为不太了解,但是你又把字符串放入了一个整数数组,除了没有先将它们解析为整数。可能是你在那里碰到的字符和它们的整数值。一个好的建议是总是知道变量的数据类型。在C++的情况下,检查STDIN给你的是什么,并确保你处理的内容是正确的。谢谢这个好的例子和答案。你能解释一下C++ StasOffFuff.com /Strus/6323 85/ARRAI-初始化吗?谢谢?- 1:这不回答问题。CIN是C++,不是C。
    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();