为什么C++和C#编译器的输出不同?

avi*_*irk 0 c# c++ compiler-construction

我之前有人问过这个问题,但这次我想知道编译器C++和之间的区别C#.

C#编码的数组

static void Main(string[] args)
    {
        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();
    }
Run Code Online (Sandbox Code Playgroud)

产量

C#输出

数组的C++编码

int main()  
{  
    clrscr();  
    int x[10];  
    int n;  
    cout << "Enter the array size= ";  
    cin >> n;  
    cout << "Enter the elements for array= ";  
    for(int i = 0; i < n; i++)  
    {  
        cin >> x[i];  
    }
    for(int i = 0; i < n; i++)  
    {  
        cout << "x[" << i << "]=" << x[i] << "\n";  
    }   
    getch();  
    return 0;  
}
Run Code Online (Sandbox Code Playgroud)

产量

C++输出
现在我的问题是,当m为C#提供相同的输入时,它要求输入4个元素并在任何数字之前保留0.但是当我在C++中使用相同的输入时,它会将0与任何数字视为一个单独的输入,即使是给它一个数字,然后输入的输入也会减少.

甚至两种语言都遵循OOP方法.那么两个编译器之间有什么区别呢.为什么这些采取了大量不同的输入并产生不同的输出.

还有一个困扰我的原因是为什么C++编译器没有为最后一个元素读取0并打印7但是我的输入是07所以根据它的上面输出它应该是0而不是7.

shf*_*301 5

这是一个完整的猜测,但Borland C++试图解释一个前导0为八进制的数字(这是一个标准约定,如十六进制的'0x'前缀).由于08不是有效的八进制数(只有0-7是八进制的有效数字),它将它分成两个输入.

尝试输入'010',如果程序打印出8,你就会知道它正在解释任何前导零为八进制的东西.

您还可以尝试通过将输入行更改为:强制cin将输入解释为十进制:

cin >> dec >> x[i];
Run Code Online (Sandbox Code Playgroud)